Php

為 Nginx 中的某個位置關閉 gzip

  • August 12, 2019

如何為特定位置及其所有子目錄關閉 gzip?我的主站點位於,我想同時為和http://mydomain.com關閉 gzip 。中開啟。http://mydomain.com/foo``http://mydomain.com/foo/bar``gzip``nginx.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 ;
   }

}

更新

我關閉gzipnginx.conf嘗試使用命名位置。但是 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;
   }

}

我假設您請求的 URL 正在try_files內部處理,location ^~ /foo/並且由於缺少這些文件,它們在內部被重定向到另一個location沒有gzip off繼承的處理程序。

嘗試在位置中使用“命名位置” /foo,然後@fooNoGzip使用gzip off內部和fascgi_pass東西定義該“命名”位置。

只是為了一些死靈浪漫:OP 的更新 nginx 配置不起作用,因為它最終由\.php$location 塊處理。

正確的解決方案是刪除它並將命名位置作為將請求轉發到 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;
   }
}

引用自:https://serverfault.com/questions/438237