我试图让我的网站的组成部分gzip压缩。 我的Ubuntu 11.04服务器和nginx的1.2。
在该网站的我的nginx的配置,我有这个
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)";
和YSlow的和谷歌速度的措施建议我用gzip来减少通过网络传输。 现在,当我尝试curl -I my_js_file
我有
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
什么我做错了或者我该怎么做才能压缩内容有任何想法?
正如其他人写的,它不足以使gzip压缩在你的服务器-客户端也需要通过索要在其请求Accept-Encoding: gzip
头(或其超)。 现代浏览器会自动包含这个头,但卷曲你需要在你的命令执行下列操作之一:
-
-H "Accept-Encoding: gzip"
:你应该看到的Content-Encoding: gzip
在响应头(可能需要的输出头,卷曲的-v
标志),以及为内容一些看似乱码的输出,实际的gzip流。 -
--compressed
:你应该仍然可以看到Content-Encoding: gzip
的响应头,但卷曲知道其输出之前的内容解压。
我找不到任何明显的错误与你的配置,通常gzip压缩上与gzip_types应用程序/ x-java描述就足以让你去。 如果一切工作的权利,你会得到一个“内容编码:gzip”返回到你。
请记住:我与谷歌的开发工具更加一致性(卷曲只是不表现浏览器那样的方式)。
在Chrome中,点击右键,进入“检查元素”,然后进入“网络”(然后重新加载页面,如果你有),然后单击资源并检查头选项卡,输出应该是这样的(注意内容-encoding是gzip的,耶):
Request URL:https://ssl.gstatic.com/gb/js/sem_a3becc1f55aef317b63a03a400446790.js
Request Method:GET
Status Code:200 OK (from cache)
Response Headersview source
age:199067
cache-control:public, max-age=691200
content-encoding:gzip
content-length:19132
content-type:text/javascript
date:Fri, 12 Apr 2013 06:32:58 GMT
expires:Sat, 20 Apr 2013 06:32:58 GMT
last-modified:Sat, 23 Mar 2013 01:48:21 GMT
server:sffe
status:200 OK
vary:Accept-Encoding
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block
无论如何,如果你确信你的内容是没有得到gzip压缩,我通常起床,用下面的蛮快的运行:
## Compression
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 4;
gzip_http_version 1.0;
gzip_min_length 1280;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
gzip_vary on;
你可以在更换试试这个为您的代码,和/或调整自己的价值观一次一个,以帮助您本地化您的问题。
记得重新启动或改变配置后重新加载nginx的。
这也可能是有用的检查您的日志,看看有没有什么有趣的东西,应该你还是被卡住。
我只是改变gzip_http_version 1.1; 待gzip_http_version 1.0; 然后它的工作
我不得不启用gzip在我/etc/nginx/nginx.conf
配置:
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
请注意,我不得不添加application/javascript
,以标准gzip_types
配置。
你需要运行:
curl -I --compressed my_js_file
使卷曲发送Accept-Encoding头gzip的 - 如果客户端发送一个报头表示将接受服务器将只压缩内容。
NB你可以这样写:
gzip_disable "msi6"
而不是使用正则表达式中的IE 5.5和6禁用,而你不需要指定为text / html作为一个类型,因为它总是只要gzip的被激活压缩。
我只是采取了猜测这里,但我想你可能需要增加你的gzip的缓冲区大小。
下面是浏览器从域拉低文件。 右边的数字是文件下载的大小。
您可能无法从屏幕截图告诉,但所有的文本内容文件是gzip压缩,除了js文件,你在你的问题提了。 在截图的js文件是在绿色的文件,大小为200K左右。 这个文件的大小比您为gzip的缓冲区(128K)指定什么更大。
该Gzip已模块的文档真的不给一个很好的迹象,以使用什么gzip的缓冲区来(缓冲区是否用于非压缩或压缩数据)。 但是,下面的帖子,似乎表明缓冲区的大小应比未压缩的文件大小大: 与NGINX,gzip和SSL大文件
这是我的nginx的配置和它的作品。
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_http_version 1.0;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/javascript application/x-javasc ript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
我认为,关键点是gzip_disable,gzip_disable和gzip_types。
就像阿拉我不得不添加gzip_http_version 1.0;
(无版本先前指定),它的工作(我试图在Firefox 27.0.0)。
我已经经历了同样的问题,阿拉,问题是杀毒软件,当前在我的电脑上安装引起的。
当文件被下载到客户机代理服务器和防病毒软件可以禁用压缩。 所以,如果你是一个客户端机器,是使用这种反病毒软件,或者是坐在后面的中间代理服务器(很多代理是透明的,你可能甚至不知道代理的介于其间的上运行的网站在浏览器客户端和Web服务器),它们可能是这个问题的原因。
禁用防病毒解决我的问题与浏览器,你甚至都不需要gzip_http_version设置为1.0。
希望这将帮助你。