说真的,这个问题我自己前后踩了不下三次坑。网上搜出来的教程十篇有八篇是复制粘贴的,根本不管用。今天按我实际操作的步骤写一遍,网站HTTPS后出现混合内容报错这块就别再走弯路了。
什么是混合内容
网站已经是https了,但页面里某些图片、CSS、JS还是用http://加载的。浏览器会认为这个页面不安全,地址栏那个小锁会变成警告。

怎么找出来
浏览器打开网站,按F12 → Console,会看到红色报错:
Mixed Content: The page at 'https://...' was loaded over HTTPS,
but requested an insecure image 'http://...'.它会直接告诉你哪个资源是http的。
最常见的原因
就是你之前发文章的时候,插图用的是http链接。
比如你从别的网站复制了一张图,图片地址是 http://xxx.com/1.jpg。网站开了https之后,这张图就加载不出来了。
解决办法一:把图片下载到本地
最彻底的方式。把那些http的图片全部下载下来,上传到自己服务器,然后文章里的链接改成https的本地地址。
如果文章多,可以写个SQL批量替换:
UPDATE typecho_contents
SET text = REPLACE(text, 'http://旧域名', 'https://新域名');解决办法二:Nginx强制跳转
在Nginx配置里加一行,把所有http请求自动转成https:
add_header Content-Security-Policy "upgrade-insecure-requests";这行代码的意思是:浏览器看到http的资源,自动尝试用https加载。
注意:这招只是绕过浏览器警告,如果对方服务器不支持https,图片还是加载不出来。 最好还是把图片存到自己站。
顺便把全站http跳https也配了
宝塔后台 → 网站 → 设置 → 配置文件,加:
if ($server_port = 80) {
return 301 https://$host$request_uri;
}这样用户输http也会自动跳到https。
好了,今天就说到这。这种问题说穿了其实不难,关键是排查的时候别慌,一步步看日志。有问题评论区聊。