|
浏览器地址栏里那个灰色的站点小锁图标突然变成红色叉号,底下弹出一行字:“此站点不安全”。不安上周我帮朋友看他的全修小型电商站,就撞上这情况。站点他一脸茫然:“昨天还好好的不安,怎么今天就‘不安全’了?全修” 这问题其实不复杂。现代浏览器判断一个站点是站点否“安全”,主要看三件事:HTTPS证书是不安否有效、证书域名是全修否匹配、页面里有没有混着加载HTTP资源。站点任何一条踩雷,不安红叉就亮起来。全修朋友那站,站点我打开开发者工具扫了一眼,不安控制台刷了十几条“Mixed Content”警告——图片、全修字体、甚至一个jQuery库,全是从HTTP地址硬拉过来的。 修复的第一步,得先定位问题源头。别急着改代码,打开浏览器按F12,切到Console面板,那些红色报错会直接告诉你哪个资源被拦了。有时候是图片路径写死了http,有时候是第三方统计脚本没走HTTPS。我见过最离谱的案例,一个WordPress站换了SSL证书,但数据库里存的老文章配图还是http协议,结果首页看着没事,点进内页就报警。 证书本身的问题也好查。在浏览器里点那个红叉,选“证书信息”,能看到具体错误。常见的有三种:证书过期、证书域名和你访问的域名对不上、证书链不完整。前两种得重新签发或续费,第三种稍微麻烦点——有些服务器配置只发了站点证书,没带中间CA证书,桌面浏览器可能能忍,但移动端直接拒连。用SSL Labs跑个测试,评级低于B的基本都有毛病。 改代码这步,说穿了就是“全站强制HTTPS”。如果你用Nginx,在server块里加一行return 301 https://$host$request_uri;,把80端口的流量全甩到443。Apache的话,.htaccess里写Rewrite规则。但光这样不够,页面里那些硬编码的http资源得挨个揪出来。我习惯用grep -r "http://" ./wp-content这种笨办法扫一遍,虽然土,但管用。 有个坑得提醒:别用那种“一键替换http为https”的插件瞎搞。数据库里有些字段存的是序列化数组,长度前缀对不上会直接崩掉。手动改或者用WP-CLI的search-replace命令,安全得多。 修完这些,红叉一般就消失了。但还有种隐蔽情况——CDN回源。朋友那站用了某家CDN,源站配了HTTPS,但CDN回源策略还是HTTP,导致部分动态请求被浏览器判定为混合内容。这种得去CDN控制台把回源协议改成“跟随”或“HTTPS”。 最后说个观察:很多人觉得“站点不安全”是浏览器抽风,重启路由器或者清缓存能糊弄过去。其实那红叉是实打实的拦截——Chrome从2020年起就对混合内容下手了,现在连被动混合内容(比如图片)都默认升级到HTTPS尝试加载,失败就阻断。用户看到红叉第一反应是关页面,你的转化率就这么没了。 修好之后,记得用curl -I https://你的域名确认返回200,再用浏览器无痕模式访问一遍。别信自己日常用的浏览器——缓存能骗人。 |