问题出现得很突然,日志倒是留得挺全。桌面访问完全正常,移动 UA 下才报混合内容,日志显示移动请求走另一条 CDN 链路,返回的 HTML 里图片地址被改写成了 http。
刚开始盯着「图片走独立域名,该域名只在移动链路被改写」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。移动链路开了 HTML 改写,把 https 降级成 http。另一种情况是移动链路的回源协议配置成了 http。
另外,桌面链路没开改写,所以测不出来。
上来先用移动 UA 取页面搜 http
curl -s -A 'Mozilla/5.0 (Linux; Android 13)' https://www.example.com/ | grep -o 'http://[^" ]*' | head
接着关掉移动链路的 HTML 改写
html-rewrite off
回源统一走 https
proxy_pass https://origin.example.com;
剩下的就是按两条链路的 UA 分别复验
curl -s -A 'Googlebot-Mobile' https://www.example.com/ | grep -c 'https://'
改之前先确认了最近有没有人动过配置,避免白查一遍。
改完先别撤,确认这几项。两条链路返回的资源地址一致,移动端不再出现混合内容提示。
同一站点走不同 CDN 链路时问题可能只在一条链路上,验证必须按 UA 分开做。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
