How can gzip be turned off for a particular location and all its sub-directories? My main site is at http://mydomain.com
and I want to turn gzip off for both http://mydomain.com/foo
and http://mydomain.com/foo/bar
. gzip
is turned on in nginx.conf
.
I tried turning off gzip
as shown below, but the Response Headers in Chrome's dev tools shows that Content-Encoding:gzip
.
How should gzip/output buffering be disabled properly?
Attempt:
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
I turned off gzip
in nginx.conf
and tried using named locations. However gzip is now always off, and gzip on;
in the location /
block does not seem to turn gzip back on. Any ideas?
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;
}
}
Best Answer
I'd suppose that URLs you're requesting are being handled with
try_files
insidelocation ^~ /foo/
and due to absence of those files, they're internally re-directed to anotherlocation
handler not havinggzip off
inherited.Try using "named location" in
/foo
location, and then define that "named" location@fooNoGzip
withgzip off
inside andfascgi_pass
stuff.