我目前正在尝试设置 Nginx 来为我的所有静态文件提供服务。由于这些文件根本不会频繁更改,因此我想使用 gzip_static 模块来预先对文件的副本进行 gzip 压缩,以节省一些 CPU 时间并实现更好的压缩。
我使用 编译了 Nginx--with-http_gzip_static_module
并对其进行了设置,以便它能够为我的静态文件提供服务,到目前为止没有任何问题。我想测试并确保静态 gzip 确实有效,因此我创建了两个文件,test.txt
和test.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
,但没有什么不同。我也用 重新编译了 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;
}
}
非常感谢您的帮助!
答案1
您在问题中没有提到这一点,但我有充分理由相信您在共享主机上的另一个 Nginx 后面运行代理的 Nginx。;)
在我撰写本文时,Nginx 的 gzip 模块默认使用 HTTP 1.1,但 Nginx 在与后端服务器通信时只能使用 HTTP 1.0,因此解决方案是gzip_http_version
在您的 中进行设置nginx.conf
,如下所示:
gzip_http_version 1.0;
完成更改后重新启动 Nginx,然后您就可以开始工作了。