技术解析

nginx 反代里缓存怎么清理
0
2021-05-26 17:46:33
idczone

遇到一个奇葩问题。
反代http://a.com/ 反代了 http://b.com/ ,我用了subs_filter替换其中的一个字符串。
但实际效果是没有替换成功。
这是我的配置:

location / {
                        proxy_pass http://b.c大带宽服务器om;
                        proxy_cookie_domain b.com a.com;
                        proxy_buffering off;
                        proxy_http_version 1.1;
                        proxy_ignore_headers Expires Vary Cache-Control X-Accel-Expires ;
                        proxy_set_header Accept-Encoding "";
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header User-Agent $http_user_agent;
                        proxy_set_header If-Modified-Since "";
                        subs_filter xxxxxx yyyyyy;
                }

看说明是因为接收到的是压缩数据,所以无法替换


那提示只是maybe。我后面分析了:
“日志意思是不是返回的包是gzip压缩过的,所以替换不了。但实际上我设置了Accept-Encoding:"",而且请求/?a的时候却是好的。所以我排除了compressed的原因。”
应该不是这个原因,如果是这个原因,又如何解决呢?

尝试开启gunzip,不管如何都尝试解压.
http://nginx.org/en/docs/http/ngx_http_gunzip_module.html

如果没有配置过proxy cache的话是不会缓存的
accept encoding上游可能不遵守
你用chrome看看返回的header到底有没有压缩
另外proxy buffer off是比较作死的设置
gunzip是在最后输出才解压吧……

感觉不像是上游不遵守压,访问 /?a 就是好的。如果不遵守不应该都不行才对?

不一定,有些比较二的设置会这样:
不带参数的直接取缓存或者静态,带参数的转发后端(PHP?)
后端不加压缩header的话,web服务器是不会随便压的
总之你先看看客户端接收到的header有没有不同

从我反代服务器返回的数据是Content-Encoding:gzip过的。
但我加/?a返回包里也有这个头Content-Encoding:gzip

数据地带为您的网站提供全球顶级IDC资源