证书装好了,地址栏有锁了,但浏览器控制台飘着一排黄字:mixed content。页面是HTTPS的,里面的图片、脚本、接口请求还是HTTP明文,等于防盗门装好了窗户开着——中间人照样能篡改这些资源,往你页面里塞东西。
定位不用肉眼翻代码,F12控制台每条警告都带着资源URL,按图索骥即可。批量排查用命令更快。
# 在源码里全局搜http引用
# 排除掉本身就该是http的(如schema写法)
grep -rn "http://" ./templates/ | grep -v "https://" \
| grep -v "http://www.w3.org" | head -30
修复按类型分。图片改协议头即可,相对路径最省心。脚本和样式属于被动混合内容,浏览器直接拦截,页面样式崩、功能挂就是这么来的,必须改。接口请求属于主动混合内容,同样被拦,除了改协议头,接口域名如果不同还得配CORS。
# nginx 全站301,老http链接全部升级
server {
listen 80;
server_name yoursite.com www.yoursite.com;
return 301 https://$host$request_uri;
}
# 内容里写死的http引用,输出时统一替换
# sub_filter一次搞定存量内容
sub_filter "http://yoursite.com" "https://yoursite.com";
sub_filter_once off;
改完在浏览器地址栏的锁图标里看证书详情,控制台清空警告即为彻底干净。再配上前面讲过的HSTS头,浏览器会记住只走HTTPS,混合内容和协议降级从此没有回头路。
A5创业网 版权所有