Nginx 和 HttpGzipStaticModule

Nginx 和 HttpGzipStaticModule

我有一个使用 gzip_static 模块构建的 nginx 实例

nginx version: nginx/1.2.6
built by gcc 3.4.6 20060404 (Red Hat 3.4.6-11)
TLS SNI support disabled
configure arguments: --prefix=/home/nginx --user=nginx --group=nginx 
--without-http_autoindex_module --without-http_empty_gif_module 
--without-http_scgi_module --with-http_ssl_module 
--with-http_gzip_static_module --with-pcre=./library/pcre-8.32/ 
--with-zlib=./library/zlib-1.2.7/

我的配置文件已打开该选项:

http {
    include mime.types;
    default_type application/octet-stream;

    gzip off;
    gzip_static on;
    gzip_vary on;

    server {
        listen 8080;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

我有一个要请求的文件的 gzip 压缩版本,它与未压缩的文件位于同一目录中,并且都具有相同的时间戳。

-rw-r--r--  1 root root   123 2013-03-28 16:42:46.000000000 ../html/test.html
-rw-r--r--  1 root root   121 2013-03-28 16:42:46.000000000 ../html/test.html.gz

当我发出请求时,我验证了Accept-Encoding:gzip,deflate,sdch标头正在发送。该请求也是 HTTP 1.1。

我可以通过它看到strace文件正在被打开,但是由于压缩文件的内容与未压缩文件的内容不同,所以我知道它没有返回版本.gz

recv(3, "GET /test.html HTTP/1.1\r\nHost: x"..., 1024, 0) = 98
open("/home/nginx/html/test.html.gz", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
open("/home/nginx/html/test.html", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 7

我感觉我错过了一些基本的东西。我读完了所有我能找到的关于这个主题的资料,但我觉得我的能力已经到了极限。

有人能帮助我了解我哪里出了问题或者我可以做些什么来进一步解决这个问题吗?

谢谢。

答案1

事实证明,我和目标机器之间有一个 WAN 优化器。该优化器Accept-Encoding在请求到达 nginx 之前删除了标头(日志记录显示)。

以防其他人通过搜索来到此处,下面是我记录标题的方式:

log_format withheader '[$time_local] "$request" $status [$http_accept_encoding]';
access_log logs/withheader.log withheader;

在 nginx 中,您可以使用然后使用$http_标头名称(小写,并将空格和连字符转换为下划线)来记录标头。

相关内容