Turn off gzip for a location in Nginx
Solution 1
I'd suppose that URLs you're requesting are being handled with try_files
inside location ^~ /foo/
and due to absence of those files, they're internally re-directed to another location
handler not having gzip off
inherited.
Try using "named location" in /foo
location, and then define that "named" location @fooNoGzip
with gzip off
inside and fascgi_pass
stuff.
Solution 2
Just for the sake of some necro-romancy: the updated nginx configuration of the OP wasn't working because it's handled ultimately by \.php$
location block.
The proper solution would be removing it and making the named locations as the ones forwarding requests to 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;
}
}
Related videos on Youtube
Nyxynyx
Hello :) These days its web development: PHP, Codeigniter, node.js, Javascript, jQuery, MySQL, mongoDB, HTML/CSS
Updated on September 18, 2022Comments
-
Nyxynyx over 1 year
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 bothhttp://mydomain.com/foo
andhttp://mydomain.com/foo/bar
.gzip
is turned on innginx.conf
.I tried turning off
gzip
as shown below, but the Response Headers in Chrome's dev tools shows thatContent-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
innginx.conf
and tried using named locations. However gzip is now always off, andgzip on;
in thelocation /
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; } }
-
Admin over 11 yearsIs your application compressing its response?
-
-
poige over 11 years@Nyxynyx, solved?
-
anup about 7 yearsThis helped me. Turning off gzip was the right solution. However the down side is that it applied to all *.php. So, text/html for all php processed pages are not compressed. We do have CDN over Varnish which will cache pages for lower TTL and that does the Gzip at last mile.
-
Danila Vershinin almost 5 yearsThis will never work. The
gzip
configuration directive only allows to be set in configuration directly and is not evaluated from a string variable produced bymap
. -
higuita almost 5 years@DanilaVershinin i never tested this, but if gzip do not accept variables and you need this, i would suggest open a bug in nginx, they are always adding support for more variable settings and this one looks like it would be useful for some people