使用nginx缓存GZIP压缩的内容

5
我想知道nginx是否可以将gzip内容保留在缓存中,还是每次都要gzip文件?
“保留在缓存中”指的是服务器端(无浏览器缓存)的内存或磁盘中的某些内容。
因为我发现静态压缩(使用sendfile)和使用nginx gzip模块(无法与sendfile一起使用)之间存在巨大差异。

你必须使用nginx来进行缓存吗?你可以尝试使用nuster,它能够缓存gzip压缩的内容。https://github.com/jiangwenyuan/nuster - nuster cache server
1个回答

10
据我所知,Nginx不会将gzip内容保存在内存中 - 管理这样的缓存通常会使其变得更慢、更复杂,并且对于99%的用例没有帮助,因为gzip的开销通常很低。我建议使用gzip_static - 如果启用它,Nginx会查找请求的文件是否有额外的.gz结尾,并将其作为gzip提供,因此如果有人请求bigfile.png,而Nginx发现也有bigfile.png.gz,它将作为gzip提供.gz文件,而不进行任何计算。我将其用于所有可以预先准备的资源(JS、CSS、图像、XML)。因为只需要gzip一次,所以您还可以使用最高的压缩比率。

2
我也这么认为,但我想知道为什么那么多Nginx配置示例从不提到这一点。特别是那些混合使用“sendfile”和“gzip”的示例。 - Thomas Decaux
我认为他们没有提到这一点,是因为Nginx通常非常明确地说明它正在做什么——它不会尝试猜测,而且它试图快速完成所有任务,因此它从不在幕后做任何额外的事情。这通常使人很容易理解,因为您不会被意外行为所困扰。较新版本的Nginx具有许多显式缓存功能,但缓存始终很难(缓存什么、多久缓存、如何找出是否更改了某些内容等),并且具有开销。而且很难让Nginx变慢:即使“未经优化”,大多数功能也能够很好地运行。 - iquito
1
如果您启用了“sendfile”和“gzip”,则“sendfile”将无法正常工作。这一点并不明确。 - Thomas Decaux

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