You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7+Plesk更新后Apache下PHP出站连接失效,Root执行正常求助

解决CentOS 7 + Plesk 17.8.11更新后PHP应用无法出站连接的问题

结合你描述的场景——终端root执行正常但网页调用失败、SELinux已禁用,我整理了几个针对性的排查和解决方向,你可以按顺序尝试:

1. 检查Plesk的PHP配置限制

Plesk更新后很容易重置部分PHP核心配置,重点确认这几个关键点:

  • allow_url_fopen:登录Plesk面板,进入对应域名的「PHP Settings」,确保这个选项处于开启状态。它是PHP发起HTTP请求的基础开关,禁用后curl、file_get_contents这类远程请求都会失效。
  • disable_functions:查看这个列表里有没有curl_exec、fsockopen、stream_socket_client这些和出站连接相关的函数。如果有,把它们从列表中移除。
  • PHP扩展状态:确认curl扩展已启用——可以在PHP设置的「已加载扩展」列表里查看,也可以在网页中运行phpinfo()来验证。

2. 验证PHP-FPM运行用户的网络权限

网页的PHP程序是通过PHP-FPM以特定用户身份运行的,和终端root的权限完全不同:

  • 先找到域名对应的PHP-FPM运行用户:在Plesk的「Web Hosting Access」页面可以看到,一般是和域名绑定的系统用户(比如user_yourdomain)。
  • 切换到该用户手动测试curl:
    su - user_yourdomain
    curl http://www.example.com
    
    如果这个用户执行curl也失败,说明是该用户的网络权限被限制——大概率是Plesk更新后修改了用户的网络策略,或者系统防火墙针对该用户做了出站限制。

3. 排查Plesk防火墙与系统防火墙规则

  • Plesk防火墙:进入Plesk的「Tools & Settings > Firewall」,检查是否存在阻止HTTP/HTTPS/SMTP等出站端口的规则。比如80、443(curl依赖),25、587(SMTP依赖)这些端口必须允许出站。
  • 系统级防火墙:即使Plesk有自己的防火墙,系统的firewalld/iptables规则也可能生效。执行以下命令查看出站规则:
    # 查看firewalld规则
    firewall-cmd --list-all
    # 查看iptables规则
    iptables -L -n
    
    确保没有拒绝apache/nginx/PHP-FPM相关用户的出站请求。

4. 临时禁用ModSecurity测试

如果你的域名启用了ModSecurity,更新后的规则集可能会误拦截出站连接:

  • 进入Plesk的「ModSecurity」设置,临时禁用该功能,然后测试网页的curl和PHPMailer是否恢复正常。如果问题解决,说明是某个规则导致的拦截,需要排查具体规则并添加例外。

5. 查看PHP错误日志获取细节

表面的错误提示往往不够具体,查看PHP错误日志能找到更精准的原因:

  • 在Plesk面板中进入对应域名的「Logs > PHP Error Log」,或者直接通过命令行查看:
    tail -f /var/www/vhosts/yourdomain.com/logs/php_error.log
    
    运行网页的测试程序,观察日志里的详细报错,比如连接超时、权限不足、端口被封等信息。

内容的提问来源于stack exchange,提问作者giorgio di falco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:50