Nginx Gzip预压缩模块为什么不起作用?


11

我目前正在尝试设置Nginx来提供我所有的静态文件。由于根本不会经常更改它们,因此我希望我们使用gzip_static模块,以允许我对文件的gzip副本进行预gzip压缩,以节省一些cpu时间并允许更好的压缩。

我用编译了Nginx --with-http_gzip_static_module并进行了设置,以便它可以为我的静态文件提供服务,到目前为止没有问题。我想测试并确保静态gziping确实可以正常工作,所以我制作了两个文件test.txttest.txt.gz。每个文件的第一行都表明是否压缩了文件,然后有一个换行符和256个随机字符(两个文件之间不同)。

我已经读过文件的修改时间和gzip压缩的对应文件应该相同,并且我尝试了以下两种方法:

touch test.*
touch -r test.txt test.txt.gx

在本地计算机上,我正在测试curl:

curl $URL/test.txt

效果很好,我找回了没有预压缩的版本,但是当我这样做时:

curl -H "Accept-Encoding: gzip" $URL/test.txt | gunzip

找回了我没有预压缩的版本。我尝试将设置gzip offnginx.conf,但没有任何区别。我也用Nginx重新编译了Nginx,--without-http_gzip_module这似乎也没有什么不同,Nginx 仍在动态地 gzip自压缩。

我对Nginx还是很陌生,但是我真的很茫然。

这是输出 ./nginx -V

built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 
configure arguments: --sbin-path=$SOMEPATH/nginx --prefix=$SOMEPATH --user=$ME --group=$MYGROUP --with-http_gzip_static_module --without-http_gzip_module

这是我的 nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
error_log  logs/error.log;
pid        logs/nginx.pid;
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    gzip_static on;
    sendfile        on;
    keepalive_timeout  65;
    access_log  logs/access.log;
    server {
        listen       XXXX;
        server_name  foo.bar.com;
        location / {
            root   html;
        }
        error_page  404 404.html;
        error_page   500 502 503 504 50x.html;
    }
}

任何帮助都非常感谢!

Answers:


8

您没有在问题中提到这一点,但是我有充分的理由认为,您正在运行Nginx代理,该Nginx代理位于共享主机上的另一个Nginx之后。;)

在撰写本文时,Nginx的gzip模块默认情况下使用HTTP 1.1,但是Nginx与后端服务器通信时只能使用HTTP 1.0,因此解决方案是gzip_http_version在您的中进行设置nginx.conf,如下所示:

gzip_http_version 1.0;

进行更改后,重新启动Nginx,您应该可以正常工作了。


惊人!你怎么知道的
尔根·保罗(
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.