如何为特定位置及其所有子目录关闭 gzip?我的主站点位于,我想为和http://mydomain.com
关闭 gzip 。在 中打开。http://mydomain.com/foo
http://mydomain.com/foo/bar
gzip
nginx.conf
gzip
我尝试如下所示关闭,但 Chrome 开发工具中的 Response Headers 显示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 ;
}
}
更新
我关闭gzip
并nginx.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) 的位置:
由于每个位置都是独立的,设置
gzip off
on@php_nogzip
将不适用于location ~ \.php$
,它仍然使用 nginx/server 默认值。这就是您看到 gzip 关闭的原因,因为这是默认设置。只有 中的 try_files 传送的文件@php_nogzip
才会被压缩。我看到的唯一方法是使用地图。在 http 块中使用:
然后在服务器中: