1

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

更新信息

url 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 ..

4

1 回答 1

3
  • 您的curl命令有效,因为它发送的是HEAD请求,而不是GET请求。尝试使用详细模式的 curl:

    curl -Iv -H "Accept-Encoding: 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. content-encoding您的 php 代码返回一个带有短 url 请求的非空标头。
  2. 您的 php 代码content-length使用短 url 请求返回错误的标头,并且该长度小于 1k。

所以最好的方法是找到两个 url 的 php 响应头并从那里开始。

于 2013-07-03T14:51:38.647 回答