nginx gzip没有在浏览器上工作但curl工作

时间:2013-07-03 07:55:53

标签: nginx gzip

我的环境是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;

感谢

我的nginx编译选项,nginx virson现在更新为1.5.2

./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/listhttp://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 ..

1 个答案:

答案 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。根据源代码,有两个可能的原因:

  1. 您的php代码会返回带有短网址请求的非空content-encoding标头。
  2. 您的php代码返回错误的content-length标头,其中包含短网址请求,且该长度小于1k。
  3. 所以最好的方法是找到两个网址的php响应标头并从那里开始。