Desativa o gzip para um local no Nginx

3

Como o gzip pode ser desativado para um determinado local e todos os seus subdiretórios? Meu site principal está em http://mydomain.com e quero desativar o gzip para http://mydomain.com/foo e http://mydomain.com/foo/bar . gzip está ativado em nginx.conf .

Eu tentei desativar gzip conforme mostrado abaixo, mas os Cabeçalhos de resposta nas ferramentas de desenvolvimento do Chrome mostram que Content-Encoding:gzip .

Como o buffer do gzip / output deve ser desativado corretamente?

Tentativa :

server {
    listen   80;
    server_name www.mydomain.com mydomain.com;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/mydomain/public;

    index index.php index.html;

    location / {
        gzip on;
        try_files $uri $uri/ /index.php?$args ;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }

    location /foo/ {
        gzip off;
        try_files $uri $uri/ /index.php?$args ;
    }

}

UPDATE

Eu desativei gzip em nginx.conf e tentei usar locais nomeados. No entanto, o gzip agora está sempre desativado, e gzip on; no bloco location / parece não ativar o gzip novamente. Alguma idéia?

server {
    listen   80;
    server_name www.mydomain.com mydomain.com;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/mydomain/public;

    index index.php index.html;

    location / {
        try_files $uri $uri/ @php;
    }

    location /foo/ {
        try_files $uri $uri/ @php_nogzip;
    }

    location @php {
        gzip on;
        try_files $uri $uri/ /index.php?$args ;
    }

    location @php_nogzip {
        gzip off;
        try_files $uri $uri/ /index.php?$args ;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }

}
    
por Nyxynyx 14.10.2012 / 20:00

2 respostas

2

Suponho que os URLs que você está solicitando estão sendo manipulados com try_files dentro de location ^~ /foo/ e, devido à ausência desses arquivos, eles são redirecionados internamente para outro manipulador location que não tem gzip off herdado.

Tente usar "local nomeado" em /foo location e defina esse local "nomeado" @fooNoGzip com gzip off inside e fascgi_pass stuff.

    
por 14.10.2012 / 21:15
0

Como cada local é independente, a configuração gzip off on @php_nogzip não se aplicará ao location ~ \.php$ , ele ainda usará o padrão nginx / server. É por isso que você vê o gzip off, porque esse é o padrão. Somente arquivos entregues pelos try_files no @php_nogzip serão compactados.

A única maneira que vejo é usar o mapa. No uso do bloco http:

map $uri   $gz {
   default  "on";
    ~/foo/  "off";
}

Em seguida, no servidor:

   location ~ \.php$ {
        gzip $gz; 
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }
    
por 30.11.2015 / 20:46