船说 CMS 出现 502 网关错误如何处理

域名注册
域名注册 正式会员超兽战士 👑年卡会员
发布于 2026-10-08 07:16 ·1 浏览 ·0 回复

照着这篇的顺序排查,你能在 10 分钟内定位船说 CMS 报 502 的真实原因并让站点恢复访问。

船说 CMS 是基于 PHP + MySQL 的内容管理系统,跑在 Nginx + PHP-FPM 上,所以它报 502 基本不是 CMS 自己的 bug,而是 Nginx 拿不到 PHP 的有效响应。下面按"先定位、再恢复、最后治根"的顺序走。

第一步:先确认 502 是谁返回的

这一步要判断错误出在源站还是 CDN,避免在白忙活的机器上查半天。打开浏览器按 F12 → Network → 刷新页面 → 点第一个主文档请求 → 看 Response Headers 里的 server 字段。如果写的是 nginx,说明源站直接挂了;如果是 cloudflare、EdgeOne 之类,说明是 CDN 回源失败。

命令行更快:curl -I https://你的域名。

注意:如果 CDN 已经缓存了 502 页面,你在源站修好了前台还是 502。去 CDN 控制台 → 缓存刷新 → URL 刷新,把首页地址刷一遍。

第二步:看 Nginx 错误日志,拿到那行关键报错

这一步的目的是把"502"翻译成一句具体的话。宝塔面板默认路径是 /www/wwwlogs/你的域名.error.log,原生安装是 /var/log/nginx/error.log:

tail -n 50 /www/wwwlogs/你的域名.error.log

对照三种最常见的输出:

  • connect() to unix:/tmp/php-cgi-74.sock failed (11: Resource temporarily unavailable) → PHP-FPM 进程被占满。
  • upstream timed out (110: Connection timed out) → 某个 PHP 脚本卡死了。
  • no live upstreams → PHP-FPM 已经死了。

注意:宝塔的「网站 → 设置 → 日志」默认只显示访问日志,错误日志在「网站 → 设置 → 配置文件」页面右侧的「错误日志」标签里,别找错地方。

第三步:检查 PHP-FPM 是否活着、进程数够不够

这一步确认 PHP-FPM 进程状态并调整并发上限。先看状态:

systemctl status php-fpm-74
ps aux | grep php-fpm | wc -l

再调进程数。宝塔面板 8.x 的路径是:软件商店 → 已安装 → PHP 7.4 → 设置 → 性能调整 → max_children。如果这里是 5 或 10,而船说 CMS 正在跑采集、批量生成静态页,很容易瞬间打满,直接 502。

按内存给值:每个 php-fpm 进程约占 40–80MB,2G 内存开到 20–30,4G 开到 40–50。改完点「保存」,宝塔会自动重载。

注意:保存后如果 502 变成 504 或整站白屏,说明开太大把内存吃满了,用 free -h 看剩余内存,往下调一档。

第四步:重启服务先恢复访问

这一步用最快的手段把站点拉起来,给自己争取排查时间:

systemctl restart php-fpm-74
systemctl reload nginx

宝塔面板对应:软件商店 → 已安装 → PHP 7.4 → 重启;Nginx → 重载配置。注意 Nginx 用「重载配置」而不是「重启」,重载不会中断已有连接。

注意:只重启不排查,采集任务一跑起来还会再挂。重启完立刻做第五步。

第五步:查船说 CMS 自身有没有卡死的任务

这一步找出把 PHP 拖死的那个具体动作。先看 PHP 慢日志,宝塔路径是「PHP 7.4 → 设置 → 慢日志」,文件在 /www/server/php/74/var/log/slow.log,找执行超过 5 秒的记录。

再看船说 CMS 后台:左侧菜单「采集管理 → 采集任务」,把正在运行的任务点「停止」;「系统 → 定时任务」里把自动采集、自动生成缓存的计划任务临时关掉。

如果是数据库拖的,进 phpMyAdmin 或命令行执行:

show full processlist;

看到船说 CMS 数据表(前缀通常是 cs_)上长时间 Query 状态的线程,记下 Id 后 kill Id;。

第六步:核对 Nginx 与 PHP-FPM 的监听地址是否一致

这一步排除配置文件写错。打开宝塔「网站 → 设置 → 配置文件」,找到 location ~ \.php$,看 fastcgi_pass 的值,例如 unix:/tmp/php-cgi-74.sock。再去「PHP 7.4 → 配置修改」看 FPM 监听地址,两边必须完全一致——PHP 从 7.4 升到 8.0 后 socket 名会变成 php-cgi-80.sock,这里不跟着改就是稳定 502。

改完先测语法再生效:

nginx -t
systemctl reload nginx

必须看到 syntax is ok 和 test is successful 才能 reload。

第七步:三个容易被忽略的开关

  • 磁盘写满:df -h,如果 / 或 /www 使用率 100%,PHP 写不了 session 和缓存,表现就是 502。清日志:rm -f /www/wwwlogs/*.log。
  • 内存 OOM:dmesg | grep -i oom,如果看到 killed process php-fpm,就是内存不足,回到第三步调小 max_children 或加内存。
  • 伪静态规则贴错:船说 CMS 的伪静态规则要贴到「网站 → 设置 → 伪静态」里,贴到别处会导致 index.php 反复跳转。

小结

  • 502 是 Nginx 拿不到 PHP 响应,先看 Nginx 错误日志那一行,再决定查进程还是查脚本。
  • Resource temporarily unavailable 就调 max_children,upstream timed out 就查慢日志和采集任务。
  • 重启 PHP-FPM 能救急,但采集任务和定时任务不停,还会复发。
  • PHP 版本升级后务必核对 Nginx 里的 socket 名称是否同步。
  • CDN 场景记得刷新缓存,否则源站修好了你看到的还是 502。
版权声明:本文来自 GJ站长论坛《船说 CMS 出现 502 网关错误如何处理》
原文链接:https://www.gj0.com/thread-811.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~