为什么 sub_filter 与 proxy_pass 一起使用时似乎不起作用?

kyl*_*yes 23 nginx proxy

鉴于nginx的以下配置:

server {
    listen  80;
    server_name apilocal;
    sub_filter  "apiupstream/api" "apilocal";
    sub_filter_once off;
    location /people/ {
            proxy_pass  http://apiupstream/api/people/;
            proxy_set_header Accept-Encoding "";
    }
}
Run Code Online (Sandbox Code Playgroud)

Sub_filter 没有正确响应响应的一部分。从配置中删除 proxy_pass 后,它就可以正常工作。很多遇到这个问题的人最终都会从上游服务器获得 gzip 压缩。我已经验证我的上游服务器没有为其响应打开 gzip 编码。但为了以防万一,我还使用了上面的 proxy_set_header 来不接受 gzip。

是否还有其他我想念的东西?

VBa*_*art 18

您的响应可能具有除sub_filter_types默认情况下定义的其他内容类型。

参考:http : //nginx.org/r/sub_filter_types

  • 我没有 proxy_set_header Accept-Encoding ""; 您需要告诉后端响应中不允许进行压缩。 (30认同)
  • 应编辑原始答案以包含@JamesTSnell 评论,否则答案将毫无用处。 (3认同)

小智 13

James T Snell 在评论中回答了这个问题:

我没有 proxy_set_header Accept-Encoding ""; 您需要告诉后端响应中不允许进行压缩。