我的环境是nginx(1.3.11)+ php-fpm
curl -I -H "Accept-Encoding: gzip,deflate" http://www.ihezhu.com/
结果是
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 03 Jul 2013 07:47:27 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=st7oa6mero58n6lmitlofa4n70; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
但是当我使用Chrome之类的浏览器并且响应不包含gzip时 [有一个特例:当打开http://www.ihezhu.com/list/md_area-c_beijing/f_2000.3000_0_0_0_0_0_0_0.0.0.0.0_0_0-s_time_asc-lt_list-p_1/时,它是响应gzip T_T]
怎么了?
我的nginx设置是
gzip on;
gzip_buffers 4 16k;
gzip_comp_level 3;
gzip_http_version 1.1;
gzip_min_length 1k;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_disable msie6;
感谢
./configure \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre=/var/src/pcre-8.33 \
--with-zlib=/var/src/zlib-1.2.8 \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi
网址http://www.ihezhu.com/list和http://www.ihezhu.com/list/md_area-c_shanghai/f_0.0_0_0_0_0_0_0_0.0.0.0.0_0_0-s_time_asc-lt_list-p_1/具有相同的响应内容,但只有长网格具有gzip ..
答案 0 :(得分:3)
您的curl
命令有效,因为它发送HEAD
请求,而不是GET
请求。尝试使用详细模式卷曲:
curl -Iv -H“接受编码:gzip,deflate”http://www.ihezhu.com/
您将获得与使用
的浏览器相同的结果curl -i -H "Accept-Encoding: gzip,deflate" http://www.ihezhu.com/
“text / html”始终是压缩的。所以它与gzip_types
指令无关。
在我的上游服务器使用http 1.0
而不是http 1.1
之前,我发生了这种情况。你试过以下这个吗?
gzip_http_version 1.0;
[<强>更新强>] 您的nginx编译选项似乎正常。很难理解url长度如何直接影响gzip上的nginx。检查了nginx源代码。 url上的任何内容都不用于确定gzip。根据源代码,有两个可能的原因:
content-encoding
标头。content-length
标头,其中包含短网址请求,且该长度小于1k。所以最好的方法是找到两个网址的php响应标头并从那里开始。