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

Modified on: Thu, 22 Aug 2019 22:00:03 +0800

我目前正在尝试设置Nginx以提供所有静态文件。因为它们不会经常更改我想要的gzip_static模块允许我预先gzip我的文件副本以节省一些CPU时间并允许更好的压缩。

我使用--with-http_gzip_static_module并设置它以便它提供我的静态文件,到目前为止没有任何问题。我想测试并确保静态gzipping实际上正在工作,所以我创建了两个文件,test.txttest.txt.gz。每个文件的第一行说明它们是否被gzip压缩,然后是换行符和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 off中设置nginx.conf,但它没有什么区别。我还用--without-http_gzip_module重新编译了Nginx,这似乎也没有什么区别,Nginx 仍然动态gzips东西。< / p>

我对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;
    }
}

非常感谢任何帮助!

最佳答案

你没有在你的问题中提到过这个问题,但是我有一个很好的权威,你在共享主机上运行Nginx代理另一个Nginx。 ;)

当我写这篇文章时,Nginx的gzip模块默认使用HTTP 1.1,但Nginx在与后端服务器通信时只能使用HTTP 1.0,因此解决方法是设置gzip_http_versionnginx.conf中,如下所示:

gzip_http_version 1.0;

进行更改后重新启动您的Nginx,您应该开展业务。

作者:,Sean F

相关问答

添加新评论