海洋 CMS HTTPS 配置后图片无法加载怎么修复

juming
juming 初级会员超兽战士
发布于 2026-10-08 14:27 ·1 浏览 ·0 回复

海洋CMS 配置 HTTPS 之后图片不显示,最常见的原因就是「混合内容(Mixed Content)拦截」:页面地址已经是 https://,但图片的 URL 仍然写死在 http://,浏览器判定为不安全资源后直接拦掉。修复要按顺序做三件事:把后台站点地址改成 HTTPS、批量替换数据库和模板里硬编码的 http://、给那些本身不支持 HTTPS 的图源单独配证书或做代理。

怎么确认是混合内容拦截?

结论:按 F12 打开 Console 和 Network 两处,几分钟就能定性,不用瞎猜。

Console 里出现 Mixed Content: The page at 'https://你的域名/' was loaded over HTTPS, but requested an insecure element 'http://.../x.jpg',就说明图片是被浏览器拦的,不是文件丢了。切到 Network 面板,筛选 img,看失败的图片请求:URL 是 http:// 开头、状态显示 blocked,属于混合内容;URL 已经是 https:// 却返回 403,问题在防盗链;返回 404,说明路径或域名写错了。

第一步:把后台的站点地址改成 HTTPS

结论:先改配置源头,否则前台每生成一条新链接,还是会带回 http://。

登录海洋CMS后台,找到「站点地址 / 网站域名」这一项,把 http:// 改成 https://。这里最容易踩的坑是域名写法:证书签发的域名是 example.com,后台就不要填 www.example.com,两者不匹配会先报证书错误,图片自然也加载不出来。带不带 www、结尾带不带 /,都要和证书、Nginx 里的 server_name 保持一致。

改完必须清缓存,否则前台读的还是旧配置。先执行后台自带的「清除缓存」功能;如果前台链接没变化,再去手动清理 data/ 或 runtime/ 这类缓存目录下的文件(目录名以你站的实际情况为准)。

第二步:批量替换数据库里硬编码的 http:// 图片地址

结论:老文章正文里的图片地址是写死的,改后台站点配置对它无效,只能在数据库里做 REPLACE。

先备份,这一步不能省:

mysqldump -u用户名 -p 数据库名 > backup_$(date +%F).sql

海洋CMS 的表前缀默认是 sea_,但各家安装时可能改过,先用 SHOW TABLES; 确认实际前缀,并找出存放文章正文的表和字段:

SELECT COUNT(*) FROM sea_你的内容表 WHERE 内容字段 LIKE '%http://你的域名%';

确认要影响的行数后再替换:

UPDATE sea_你的内容表
SET 内容字段 = REPLACE(内容字段, 'http://你的域名', 'https://你的域名');

关键注意点:只替换你自己域名的 http://,不要去全局把 http:// 替换成 https://。因为正文里还有外链图片,别人家的服务器可能根本不支持 HTTPS,你改成 https 反而让原本能显示的图变成 404。

第三步:模板和静态资源里的 http:// 也要一起清

结论:模板文件里写死的图片、JS、CSS 地址同样会被浏览器拦,而且不会出现在数据库里,容易被漏掉。

先用 grep 把带域名的 http 引用找出来:

grep -rn "http://你的域名" ./模板目录 | head -50

确认结果无误后批量替换:

grep -rl "http://你的域名" ./模板目录 | xargs sed -i 's|http://你的域名|https://你的域名|g'

更省事的写法是把域名部分改成协议相对地址 //你的域名/uploads/x.jpg,浏览器会自动跟随当前页面的协议走。替换完记得再清一次缓存。

图源本身不支持 HTTPS 怎么办?

结论:图片存在 HTTP 的第三方图床或旧服务器上,页面这边怎么改都救不了,必须让图源支持 HTTPS 或换掉它。

三条路可选:一是给图床或 CDN 申请证书,开启 HTTPS;二是把图片搬到自己主域名下,协议自然统一;三是用 Nginx 反向代理一个 https://你的域名/img-proxy/ 指向那个 http 图源。

Nginx 里还可以加一行兜底,放在 server {} 块内:

add_header Content-Security-Policy "upgrade-insecure-requests";

它让浏览器把页面内的 http:// 请求自动升级成 https://,但前提是目标服务器真的支持 HTTPS,所以只能作为前面几步的补充,不能当唯一方案。

改完还是 403?查防盗链

结论:从 HTTP 切到 HTTPS 后,Referer 头也跟着从 http:// 变成 https://,某些防盗链白名单只写了 http 版本,就会统一返回 403。

检查 Nginx 里的 valid_referers 配置,把 https://你的域名 和 https://www.你的域名 都加进白名单;也可以临时打开访问日志,把 $http_referer 打出来确认一下真实值。

怎么验证修好了

刷新前台页面,F12 的 Network 里所有图片请求都应该是 https:// 开头且状态 200;Console 里不再有任何 Mixed Content 报错。再到命令行抽查一张图:

curl -I https://你的域名/uploads/2024/x.jpg

返回 HTTP/2 200 就说明整条链路通了。

总结一下顺序:先查 Console 定性,改后台站点地址并清缓存,再替换数据库和模板里的 http://,最后处理不支持 HTTPS 的图源和防盗链白名单。四步做完,海洋CMS 的图片在 HTTPS 下就能正常显示了。

版权声明:本文来自 GJ站长论坛《海洋 CMS HTTPS 配置后图片无法加载怎么修复》
原文链接:https://www.gj0.com/thread-999.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~