如何禁用 Nginx 双 gzip 编码,当 fastcgi 后端偶尔提供带有内容编码的 gzip 时


How to disable Nginx double gzip encoding when fastcgi backend occasionally serves gzipped with content-encoding?

如果后端已经设置了"内容编码"标头,有什么聪明的方法可以欺骗nginx停止gzip吗?

Nginx被配置为gzip来自php fastcgi后端的输出。

这在 99% 的情况下效果很好。

除非在极少数情况下,php 会发送一个原始的 gzip 文件并附加一个 Content-Encoding: gzip 标头。

不幸的是,Nginx将继续尝试第二次压缩该内容。

生成双content-encoding: gzip content-encoding: gzip标头和双编码的 gzip 正文。

大多数现代浏览器都可以处理这个问题,火狐,铬。

IE8不能,Safari移动不能,旧的Safari 5 for Windows不能 - 相反,它们将显示乱码的gzip内容,因为它合并了内容编码标头,并且只解码gzip正文一次。

感谢您的任何想法。

nginx.conf 中适用的某个地方(某处应该有一个fastcgi_params文件):

fastcgi_param  HTTP_ACCEPT_ENCODING      "";

这将禁用后端的编码。

我希望在此之后,Nginx仍然会提供编码内容。(我不确定)