
这次又开始折腾网站了,折腾的后果也是非常麻烦,记录一下过程帮助其他遇到问题的朋友。
具体问题表现在,php7升级php8之后,首先wordpress网站打开报错502 Bad Gateway nginx。然后以为是WordPress不兼容php8,于是回退php7。回退后首页可以正常打开,但是进入后台报错502 Bad Gateway nginx
后面查了查以为是插件不兼容php8,试着在后台将plugin文件夹内所有的插件更换名称,停止使用所有插件。停止插件之后,现在进入网站后台正常,但是一旦点击插件页面、添加插件、或者wordpress自带的小工具,一律报错502 Bad Gateway nginx。尝试升级nginx版本也没有帮助。
这个问题就很奇怪了,最后多方检查发现,是我之前安装了多个版本的Openssl,这多个版本冲突了。一开始没问题,后面安装了PHP8以后导致该问题爆发。
具体反映在检查Nginx错误日志:
recv() failed (104: Connection reset by peer) while reading response header from upstream
原因就是PHP-FPM进程在处理请求时异常终止,导致Nginx无法获取响应。
网上说主要问题可能是:
- PHP-FPM进程崩溃(资源不足、配置错误)
- 脚本执行超时(PHP或Nginx超时设置过短)
- 内存耗尽(OOM Killer杀死PHP-FPM进程)
- Unix Socket权限或文件系统问题
但是本机问题和上面这些问题完全无关。
尝试在SSH中执行任务:systemctl status php7.4-fpm
得到:Unit php7.4-fpm.service could not be found.
php-fpm-74.service loaded active exited LSB: starts php-fpm
意味着 PHP 7.4 的 FPM 服务已经启动,但是退出了。这通常表示 PHP-FPM 服务启动后没有保持活动状态,可能是配置问题或其他原因导致服务退出。
检查日志
/var/log/php7.4-fpm.log
或者
/www/server/php/74/var/log/php-fpm.log
发现:
[10-Jul-2025 15] WARNING: [pool www] child 2120 exited on signal 11 (SIGSEGV) after 108.832043 seconds from start
php-fpm 进程持续崩溃并且经常收到 SIGSEGV (Segmentation Fault) 信号,这通常是内存访问错误
输入dmesg | grep php-fpm
检查原因,发现报错:
[ 329.235359] php-fpm[4684]: segfault at 7fbe52021bc0 ip 00007fbe52021bc0 sp 00007ffe8d0b87c8 error 15 in libssl.so.1.1[7fbe5201a000+8000] [ 346.760690] php-fpm[4681]: segfault at 7fbe52021bc0 ip 00007fbe52021bc0 sp 00007ffe8d0b87c8 error 15 in libssl.so.1.1[7fbe5201a000+8000] [ 347.374665] php-fpm[4721]: segfault at 7fbe52021bc0 ip 00007fbe52021bc0 sp 00007ffe8d0b87c8 error 15 in libssl.so.1.1[7fbe5201a000+8000] [ 472.510853] php-fpm[4719]: segfault at 7fbe52021bc0 ip 00007fbe52021bc0 sp 00007ffe8d0b87c8 error 15 in libssl.so.1.1[7fbe5201a000+8000]
dmesg 的输出可以看出,PHP-FPM 进程频繁因 libssl.so.1.1 导致的段错误(SIGSEGV)崩溃,这表明问题与 OpenSSL 库有关。
如何判断呢?在远程ssh界面里面输入ldd $(which php-fpm) | grep ssl
返回:
libssl.so.1.0.0 => not found
libssl.so.1.1 => ……openssl/lib/libssl.so.1.1 (0x00007f6275676000)
libcrypto.so.1.1 => ……openssl/lib/libcrypto.so.1.1 (0x00007f627518a000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007f6274687000)
libssl3.so => /lib64/libssl3.so (0x00007f6273fbf000)
从 ldd 输出可以看出,PHP-FPM 仍然尝试加载多个不同版本的 OpenSSL 库,这会导致 SIGSEGV 段错误。
解决办法的思路:
统一 OpenSSL 版本
修复 PHP-FPM 的库链接
验证修复完成之后
当执行
ldd $(which php-fpm) | grep ssl
命令以后,如果输出正常了,那就可以重新安装php了
libssl.so.1.1 => /lib64/libssl.so.1.1
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1
由于我整错了步骤,导致系统混乱。最后让sudo报错
sudo: error in /etc/sudo.conf, line 19 while loading plugin “sudoers_policy”
sudo: unable to load /usr/libexec/sudo/sudoers.so: libssl.so.10: cannot open shared object file: No such file or directory
sudo: fatal error, unable to load plugins
因为 sudo 命令本身也依赖 libssl.so.10,如果贸然对这个ssl库进行操作,就会导致sudo以来的libssl库被移除或损坏。
最后连sudo都用不了了,yum也废了。
删完之后,甚至导致了面板崩溃,正好我又忘记了SSH密钥,这下完了:
File “/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py”, line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File “/www/server/panel/BTPanel/__init__.py”, line 522, in home
comReturn = comm.local()
File “class/common.py”, line 84, in local
result = self.setSession()
File “class/common.py”, line 99, in setSession
import config
File “class/config.py”, line 13, in
import PluginLoader
ImportError: libssl3.so: cannot open shared object file: No such file or directory
所以我就不把具体的步骤放上来了,避免导致大家也做错。我最后直接重装系统了重装完发现wordpress基本可以完美兼容PHP8……目前安装的插件也可以正常运行,最初的升级报错主要是由于之前升级openssl冲突导致的历史遗留问题引发的。而不是wordpress兼容性问题引起的。
总结反思:
- 要开始折腾网站之前,请务必备份所有网站文件和数据库再进行操作,以避免不必要的损失。
- 每一步执行都要备份,尤其是对openssl或者libssl3或者libssl.so.1.1之类的操作,不要随意删除文件,以避免损失。
- 善用SSL,但是要仔细读一下他的要求,让要备份的时候及时备份。
- 记得保存好SSH密钥。