上周公司同事出差,发现深圳网络对网站劫持比较严重,重要站点都被挂上了非法的小广告,更担心的是网站挂的商务通js也有可能被劫持替换。
因公司使用的是商务通服务器版,升级还需要加钱,简单的https功能还要付费,严重的乱收费啊。我想通过nginx提供反向https代理一样可以满足此需求
经测试完全正常,现将配置公布如下,假设域名是xytong.cc
server {
listen 443 ssl;
server_name www.xytong.cc;
access_log logs/access.log ;
ssl_certificate ../ssl/www.xytong.cc/www.xytong.cc.pem;
ssl_certificate_key ../ssl/www.xytong.cc/www.xytong.cc.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-SSL on;
proxy_hide_header Vary;
proxy_redirect off;
#规则1,url域名替换
sub_filter 'http://www.xytong.cc' 'https://www.xytong.cc';
#规则2,js变量 var logolist, 转义的url字符替换
sub_filter 'http%3a%2f%2fwww.xytong.cc' 'https%3a%2f%2fwww.xytong.cc';
#规则3,js文件:ChatBW2JS.aspx?jid=d ,函数SetLogo 图片url替换为https
sub_filter 'logosrc1.replace("https://", "http://")' 'logosrc1.replace("https://", "https://")';
sub_filter 'logosrc1 = logosrc1.toLowerCase();' 'logosrc1 = logosrc1.toLowerCase(); logosrc1 = logosrc1.replace("http://", "https://");';
#所有的文件类型都替换
sub_filter_types *;
#满足条件的字符串都替换,而不是仅仅一次
sub_filter_once off;
}
}
注意:
1.sub_filter共三种类型,共计四条规则,用途见红字备注
2.源服务器不能开启gzip,否则sub_filter规则会失效
3.将nginx与商务通部署在同一台服务器即可,即:用户至nginx使用https,nginx至商务通iis 服务使用http。