nginx是否有一种在运行时进行预压缩并进行即时解压缩的方法?

4
使用预压缩模块查找预压缩的 .gz 页面版本,并将其提供给支持 gzip 的浏览器,以避免即时压缩的开销非常容易。但我想做的是从磁盘中删除未压缩的版本,仅存储压缩的版本,这显然会以相同的方式提供服务,但如果不支持 gzip 的用户代理请求页面,则希望 nginx 在传输之前即时解压缩它。
是否有人已经完成了这项工作,或者是否有其他高性能 Web 服务器提供此功能?
2个回答

4
使用http_gzip_static_module是在Nginx上发送静态预压缩的gzipped文件的最佳方式。具体来说,在配置中您需要:

gzip_static always;

http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html

为了能够提供未压缩版本的文件,即你的服务器上只有 .gz 文件以节省 IO,你需要使用 http_gunzip_module。在你的配置文件中,它看起来像这样:

gunzip on;

http://nginx.org/en/docs/http/ngx_http_gunzip_module.html

你可能也会对gunzip_module页面底部的链接感兴趣。
附言:在预压缩文件时,我建议使用Google的Zopfli压缩算法,它会增加构建时间(而不是解压时间),但可以将文件大小减少约5%。https://code.google.com/p/zopfli/

0

一种选择是拥有一个备用 上游服务器来解压文件,例如:

gzip_static on;
...
upstream decompresser {
    server localhost:8080; // script which will decompress the file
}

location / {
    try_files $uri @decompress;
}

location @decompress {
    proxy_pass http://decompresser;
}

另一个选择是使用 嵌入式Perl模块 作为回退选项,而不是上游选项,但这可能会导致nginx阻塞,如果操作持续一段时间可能会降低性能。
通过上游模型,您可以利用nginx的 XSendfile 模块,通过使用系统的默认 gzip 程序将文件解压缩到 /tmp 目录中的文件中。这可以通过允许文件在短时间内挂起来节省每个请求的解压缩开销。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接