I am trying to enable gzip compression for components of my website. I have ubuntu 11.04 server and nginx 1.2.
in my nginx configuration of the website, i have this
gzip on; #gzip_min_length 1000; gzip_http_version 1.1; gzip_vary on; gzip_comp_level 6; gzip_proxied any; gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml; #it was gzip_buffers 16 8k; gzip_buffers 128 4k; #my pagesize is 4 gzip_disable "MSIE [1-6]\.(?!.*SV1)";
and Yslow and google speed measures are advising me to use gzip to reduce transmission over network.
now when i try to curl -I my_js_file
i got
curl -I http://www.albawaba.com/sites/default/files/js/js_367664096ca6baf65052749f685cac7b.js HTTP/1.1 200 OK Server: nginx/1.2.0 Date: Sun, 14 Apr 2013 13:15:43 GMT Content-Type: application/x-javascript Content-Length: 208463 Connection: keep-alive Last-Modified: Sun, 14 Apr 2013 10:58:06 GMT Vary: Accept-Encoding Expires: Thu, 31 Dec 2037 23:55:55 GMT Cache-Control: max-age=315360000 Pragma: public Cache-Control: public Accept-Ranges: bytes
any idea of what i have done wrong or what shall i do to get compressed content?
I can't find anything obviously wrong with your config, usually gzip on & gzip_types application/x-javascript would be enough to get you going. If everything is working right you'll get a "Content-Encoding:gzip" returned back to you.
PLEASE KEEP IN MIND: I have much more consistency with GOOGLE DEVELOPER TOOLS (curl just doesn't behave the way a browser would).
In Chrome, right click and go to "inspect element" then go to "network" (then reload the page if you have to), then click on a resource and check the header tab, the output should look like this (notice the content-encoding is gzip, yay):
Anyway if you are SURE your content is not getting gzipped, I normally get up and running pretty fast with the following:
You could try this in replacement for your code, and/or tweak your values one at a time to help you localize your issue.
Remember to restart or reload nginx after changing the config.
It may also be useful to check your logs and see if there's anything interesting there should you still be stuck.
I've experienced the same problem as Alaa, and the problem is caused by Antivirus software, that is currently installed on my computer.
Proxy servers and anti-virus software can disable compression when files are downloaded to a client machine. So if you are running web site in a browser on a client machine that is using such anti-virus software, or that sits behind an intermediate proxy server (many proxies are transparent, and you may not even be aware of a proxy intervening between your client and web server), they may be the cause of this issue.
Disabling antivirus solved my problem with browsers and you don't even need to set gzip_http_version to 1.0.
Hope that will help you.
Here is my nginx configuration and it works.
I think keypoints are gzip_disable, gzip_disable and gzip_types.
As others have written, it's not enough to enable gzip compression in your server -- the client also needs to ask for it in its requests via the
Accept-Encoding: gzip
header (or a superset thereof). Modern browsers include this header automatically, but for curl you'll need to include one of the following in your command:-H "Accept-Encoding: gzip"
: You should see theContent-Encoding: gzip
header in the response (might need to output headers with curl's-v
flag), as well as some seemingly garbled output for the content, the actual gzip stream.--compressed
: You should still seeContent-Encoding: gzip
in the response headers, but curl knows to decompress the content before outputting it.I am just taking a guess here, but I think you may have to increase your gzip buffer size.
Here are the files that the browser pulls down from the domain. The number on the right is the file download size.
You may not be able to tell from the screen shot, but all of the text content files ARE gzipped, except for the js file you mention in your question. In the screenshot the js file is the file in green, with a size of about 200K. This file size is greater than what you have specified for your gzip buffers (128K).
The Gzip module docs do not really give a good indication as to what the gzip buffers are used for (whether the buffers are used for uncompressed or compressed data). However, the following post seems to indicate that the buffer size should be greater than the uncompressed file size: Large files with NGINX, GZip, and SSL
I just changed gzip_http_version 1.1; to be gzip_http_version 1.0; and then it worked