Nginx 转发时 sub_filter 不生效
最近在使用 proxy_pass
反向代理的时候,需要修改上游的一个 js 文件的内容,按照文档使用 sub_filter
,但是并没有生效,具体原因是 nginx 的 sub_filter
无法识别经过 gzip 压缩的数据,所以会忽略该指令,最简单的方法是关闭上游的压缩,需要添加 proxy_set_header Accept-Encoding "";
,具体配置如下:
location / {
proxy_pass http://remote_host;
# ...
proxy_set_header Accept-Encoding "";
sub_filter 'old_content' 'new_content';
sub_filter_types *;
sub_filter_once off;
}
这个处理方法虽然简单,但是由于关闭了上游的压缩,因此本机入站的流量会有所增加,网上找到另一种解决方法:nginx 新增一个反向代理,利用 gunzip 模块先解压,然后返回数据,这样子开销不大,入站流量不变,可以尝试一下,具体看参考链接。