web-dev-qa-db-ja.com

Nginxの場所のgzipをオフにする

特定の場所とそのすべてのサブディレクトリでgzipを無効にするにはどうすればよいですか?私のメインサイトはhttp://mydomain.comにあり、http://mydomain.com/foohttp://mydomain.com/foo/barの両方に対してgzipをオフにしたいと思います。 gzipnginx.confで有効になっています。

以下に示すようにgzipをオフにしてみましたが、Chromeの開発ツールの応答ヘッダーにはContent-Encoding:gzipと表示されます。

Gzip /出力バッファリングを適切に無効にするにはどうすればよいですか?

試行

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 ;
    }

}

更新

nginx.confgzipをオフにし、名前付きの場所を使用してみました。ただし、gzipは常にオフになり、gzip on;ブロックのlocation /はgzipをオンに戻していないようです。何か案は?

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;
    }

}
4
Nyxynyx

リクエストしているURLはtry_files内のlocation ^~ /foo/で処理されていると思いますが、これらのファイルがないため、それらは内部で別のlocationハンドラーにリダイレクトされます。 gzip offを継承しています。

/fooの場所で「名前付きの場所」を使用してみてから、「名前付き」の場所@fooNoGzipgzip off内部とfascgi_passなどで定義します。

2
poige

ネクロマンシーのために:OPの更新されたnginx構成は、最終的に\.php$ロケーションブロックによって処理されるため、機能していませんでした。

適切な解決策は、それを削除し、FastCGI(PHP-FPM)にリクエストを転送する場所として名前付きの場所を作成することです。

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;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }

    location @php_nogzip {
        gzip off;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }
}
0

各場所は独立しているため、_gzip off_に_@php_nogzip_を設定しても_location ~ \.php$_には適用されず、nginx/serverのデフォルトが使用されます。これがデフォルトであるため、gzipがオフになっている理由です。 _@php_nogzip_のtry_filesによって配信されたファイルのみが圧縮されます。

私が見る唯一の方法は地図を使うことです。 httpブロックでの使用:

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

次に、サーバーで:

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