如何防止Nginx反向代理重新压缩上游压缩响应?

问题描述

我有Nginx反向代理,它从上游(清漆缓存)接收brotli压缩响应。但是,仅当我设置为“ brotli on”时,反向代理才会向浏览器提供brotli压缩响应。在反向代理服务器块中。

我的目标是让Nginx反向代理完全不处理压缩。为此,我有以下问题:

  1. 是否期望反向代理块解压缩接收到的响应并自行处理?它不能直接将上游响应传递回客户端吗?

  2. 是否可以将代理响应转储到Nginx日志中?这将有助于更好地调试问题。

解决方法

我已解决此问题,因此将其发布给可能遇到类似问题的任何人:

  1. Varnish将我的“ Accept-Encoding”请求标头更改为“ gzip”。根据Varnish文档,这是设计好的(see here)。
  2. 但是,上游nginx服务器(位于varnish之后)使用非压缩内容进行响应,因为gzip_http_version的默认值为1.0,而proxy_http_version的默认值为1.1。 (see here

决议是通过以下方式实现的:

a。通过将-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';