需求来源
一个小程序里面需要使用WebView来展示微信公众号的文章,但是小程序里面WebView的域名和公众号的域名不一致,所以需要通过nginx反向代理来解决。
解决过程中发现文章中会有图片和视频等,所以需要将图片和视频的URL也进行反向代理,否则图片和视频无法正常显示。
实现思路
- 在location块中添加一个proxy_pass指令,将请求转发到微信公众号的域名。
- 设置 proxy_set_header指令,将请求头中的Host字段设置为微信公众号的域名。
- 设置 proxy_set_header指令,将请求头中的Referer字段设置为微信公众号的域名。
- 设置 proxy_set_header指令,将请求头中的Accept-Encoding字段设置为空,方便后面做内容替换。
- 设置sub_filter将内容中新出现的地址(链接、图片、视频)等替换为转发地址。
- CSS或一些样式里面,存在图片等资源作为背景或其他的,所以额外再添加一个location配置。
配置示例
location /mps/ {
proxy_pass https://mp.weixin.qq.com/;
proxy_set_header Accept-Encoding "";
proxy_set_header Referer 'https://mp.weixin.qq.com/';
sub_filter 'src="/mp/' 'src="/mps/mp/';
sub_filter 'https://mmbiz.qpic.cn/' '/mpsimg/';
sub_filter 'http://mmbiz.qpic.cn/' '/mpsimg/';
sub_filter 'https:\/\/mmbiz.qpic.cn\/' '\/mpsimg\/';
sub_filter 'http:\/\/mmbiz.qpic.cn\/' '\/mpsimg\/';
sub_filter 'https://mpvideo.qpic.cn/' '/mpsvideo/';
sub_filter 'http://mpvideo.qpic.cn/' '/mpsvideo/';
sub_filter 'https:\/\/mpvideo.qpic.cn\/' '\/mpsvideo\/';
sub_filter 'http:\/\/mpvideo.qpic.cn\/' '\/mpsvideo\/';
sub_filter 'http://mp.weixin.qq.com/' '/mps/';
sub_filter 'https://mp.weixin.qq.com/' '/mps/';
sub_filter 'http:\/\/mp.weixin.qq.com\/' '/mps/';
sub_filter 'https:\/\/mp.weixin.qq.com\/' '/mps/';
sub_filter '<meta name="referrer" content="origin-when-cross-origin">' '<meta name="referrer" content="no-referrer">';
sub_filter '<meta name="referrer" content="strict-origin-when-cross-origin">' '';
sub_filter_types *;
sub_filter_once off;
}
location /mpsimg/ {
proxy_pass https://mmbiz.qpic.cn/;
proxy_set_header Accept-Encoding "";
proxy_set_header Referer 'https://mp.weixin.qq.com/';
}
location /mpsvideo/ {
proxy_pass https://mpvideo.qpic.cn/;
proxy_set_header Accept-Encoding "";
proxy_set_header Referer 'https://mp.weixin.qq.com/';
}
location /mp/ {
proxy_pass https://mp.weixin.qq.com/mp/;
proxy_set_header Accept-Encoding "";
proxy_set_header Referer '';
sub_filter 'src="/mp/' 'src="/mps/mp/';
sub_filter 'https://mmbiz.qpic.cn/' '/mpsimg/';
sub_filter 'http://mmbiz.qpic.cn/' '/mpsimg/';
sub_filter 'https:\/\/mmbiz.qpic.cn\/' '\/mpsimg\/';
sub_filter 'http:\/\/mmbiz.qpic.cn\/' '\/mpsimg\/';
sub_filter 'https://mpvideo.qpic.cn/' '/mpsvideo/';
sub_filter 'http://mpvideo.qpic.cn/' '/mpsvideo/';
sub_filter 'https:\/\/mpvideo.qpic.cn\/' '\/mpsvideo\/';
sub_filter 'http:\/\/mpvideo.qpic.cn\/' '\/mpsvideo\/';
sub_filter 'http://mp.weixin.qq.com/' '/mps/';
sub_filter 'https://mp.weixin.qq.com/' '/mps/';
sub_filter 'http:\/\/mp.weixin.qq.com\/' '/mps/';
sub_filter 'https:\/\/mp.weixin.qq.com\/' '/mps/';
sub_filter '<meta name="referrer" content="origin-when-cross-origin">' '<meta name="referrer" content="no-referrer">';
sub_filter '<meta name="referrer" content="strict-origin-when-cross-origin">' '';
sub_filter_types *;
sub_filter_once off;
}