Nginx代理网站替换内容的字符编码和节省流量问题解决办法

nginx

1、代理一个网站:

location / {
proxy_pass http://www.moneyslow.com/;
}

2 替换一些内容

Nginx代理网站替换内容的字符编码和节省流量问题解决办法
小偷流量代理

location / {
# 必须设置,不然www.moneyslow.com返回的是gzip压缩过的内容
proxy_set_header Accept-Encoding "";
proxy_pass http://www.moneyslow.com/;
# 使用sub模块
sub_filter_once off; # 可用替换多次
sub_filter "慢慢赚钱博客" "慢慢赚钱新闻"; # 把 慢慢赚钱博客 替换成 慢慢赚钱新闻
sub_filter "NBA" "NBC"; # 把 NBA 替换成 NBC
}

注意事项:如果只有“NBA”替换成“NBC”成功了,“慢慢赚钱博客”替换成“慢慢赚钱新闻”失败了,这个问题要处理字符编码问题,打开Chrome浏览器的调试窗口,服务器返回的内容经过了gzip压缩,内容编码为GB2312,gzip压缩的问题我们用 proxy_set_header Accept-Encoding “”; 指令解决了。对于编码问题,由于配置文件的编码为UTF-8,网页内容编码为GB2312,所以对于中文,编码不一样,无法用“慢慢赚钱新闻”替换“慢慢赚钱博客”。把配置文件夹保存为GBK(兼容GB2312)试下。

3 通过两次proxy_pass节省流量

在上一步中,我们需要用 proxy_set_header Accept-Encoding “”;配置指令,以便让www.moneyslow.com返回解压缩后的内容,以方便内容替换。这种做法会增加网络流量,更好的方法:用两次proxy_pass,第一次是向远程服务器,获取到的是gzip压缩的内容,第二次是内部proxy_pass,获取到解压后的内容。

location / {
# 该行指令与下面 location /pass/ 中的 gunzip on 二选一即可
proxy_set_header Accept-Encoding "";
proxy_set_header Host $host;
# 内部proxy_pass
proxy_pass http://127.0.0.1/pass$uri;

sub_filter_once off;
sub_filter "慢慢赚钱博客" "慢慢赚钱新闻";
sub_filter "NBA" "NBC";
sub_filter "</html>" "<style>.a_cover,.neteaselogo{transform:rotateX(180deg)!important;}</style></html>";
}
location /pass/ {
#gunzip on;
proxy_pass http://www.moneyslow.com/;
}