如何防止nginx反向代理重新压缩上游压缩响应?
How to prevent nginx reverse proxy recompress the upstream compressed response?
我有 nginx 反向代理,它从上游(Varnish 缓存)接收 brotli 压缩响应。但是,仅当我设置“brotli on”时,反向代理才会对浏览器提供 brotli 压缩响应;在反向代理服务器块内。
我的目标是让 nginx 反向代理完全不处理压缩。为此,我有以下问题:
是否期望反向代理块解压缩收到的响应并自行处理?不能直接把上游响应传回客户端吗?
有没有办法将代理响应或它的大小转储到 nginx 日志?这将有助于更好地调试问题。
我已经解决了这个问题,所以将此发布给可能遇到类似问题的任何人:
- Varnish 将我的 'Accept-Encoding' 请求 header 更改为 'gzip'。根据 Varnish 文档,这是设计好的 (see here)。
- 但是,上游 nginx 服务器(在 varnish 后面)响应了 non-compressed 内容,因为
gzip_http_version
的默认值是 1.0,而 proxy_http_version
的默认值是 1.1。 (see here)
解决方法是:
一个。通过将 -p http_gzip_support=off
传递给 varnishd
.
来设置 Varnish 不担心压缩
b。在上游 Nginx 服务器上将 gzip_http_version
设置为 1.1
。
破译上述行为成为可能,因为我在我的上游 nginx 服务器(清漆后面的服务器)上记录了以下内容:
log_format bytes_sent '$bytes_sent' - '$http_accept_encoding' - '$request';
我有 nginx 反向代理,它从上游(Varnish 缓存)接收 brotli 压缩响应。但是,仅当我设置“brotli on”时,反向代理才会对浏览器提供 brotli 压缩响应;在反向代理服务器块内。
我的目标是让 nginx 反向代理完全不处理压缩。为此,我有以下问题:
是否期望反向代理块解压缩收到的响应并自行处理?不能直接把上游响应传回客户端吗?
有没有办法将代理响应或它的大小转储到 nginx 日志?这将有助于更好地调试问题。
我已经解决了这个问题,所以将此发布给可能遇到类似问题的任何人:
- Varnish 将我的 'Accept-Encoding' 请求 header 更改为 'gzip'。根据 Varnish 文档,这是设计好的 (see here)。
- 但是,上游 nginx 服务器(在 varnish 后面)响应了 non-compressed 内容,因为
gzip_http_version
的默认值是 1.0,而proxy_http_version
的默认值是 1.1。 (see here)
解决方法是:
一个。通过将 -p http_gzip_support=off
传递给 varnishd
.
b。在上游 Nginx 服务器上将 gzip_http_version
设置为 1.1
。
破译上述行为成为可能,因为我在我的上游 nginx 服务器(清漆后面的服务器)上记录了以下内容:
log_format bytes_sent '$bytes_sent' - '$http_accept_encoding' - '$request';