CentOS中PHP连接127.0.0.1报错2003的排查与修复
解决CentOS环境下PHP通过127.0.0.1连接MySQL报错“Can't connect to MySQL server on '127.0.0.1' (13) 2003”的问题。该错误多由SELinux阻止Web服务进程发起网络连接引起,可通过调整SELinux布尔值或修改配置文件来解决。
问题描述
在Linux本机运行PHP脚本时连接正常,但在浏览器访问同一脚本时却抛出以下错误:
Could not connect: Can't connect to MySQL server on '127.0.0.1' (13) 2003
这表明PHP脚本本身语法无误,但执行环境(Apache/Nginx)被系统安全模块拦截了出站数据库连接请求。
根本原因:SELinux网络限制
CentOS默认开启了SELinux,其策略默认禁止HTTPD进程(如Apache或Nginx)连接外部网络。使用以下命令检查相关布尔值:
# getsebool -a | grep httpd
如果输出显示 httpd_can_network_connect --> off,则说明确实是SELinux阻止了连接。
解决方案一:临时开启网络连接权限
如果不打算关闭SELinux,可以手动允许HTTPD进程进行网络连接:
# setsebool -P httpd_can_network_connect 1
参数解释:
- -P:持久化配置,即使重启服务器后依然生效。
- 1:开启该布尔值。
操作完成后,刷新页面测试连接是否恢复。
解决方案二:彻底关闭SELinux(生产环境需谨慎)
对于开发环境或非严格安全要求的服务器,直接关闭SELinux是更彻底的解决方式。请按照以下步骤操作:
第1步:验证当前状态
确认SELinux处于开启状态:
# sestatus -v
或者:
# getenforce
若返回 Enforcing 或 Enabled,则继续下一步。
第2步:临时关闭(立即生效)
重启不生效,仅针对当前会话:
# setenforce 0
此时再次测试,连接应当正常。但这只是权宜之计。
第3步:永久关闭(修改配置文件)
警告:在生产环境中关闭SELinux会降低系统安全性。请务必评估安全风险后再操作。
- 编辑SELinux配置文件:
# vi /etc/selinux/config
- 找到
SELINUX=enforcing一行,将其修改为:
SELINUX=disabled
- 保存退出并重启系统:
# reboot
补充:关闭防火墙(如需)
如果上述步骤后仍无法连接,可能是防火墙拦截。可参考以下操作关闭iptables和ip6tables:
# chkconfig --level 12345 iptables off
# chkconfig --level 12345 ip6tables off
# service iptables stop
# service ip6tables stop
完成判断
- SELinux布尔值已更改或状态为Disabled。
- PHP脚本在浏览器端可成功打印出MySQL连接资源,不再报2003错误。
以上就是CentOS下PHP使用127.0.0.1连接MySQL报错的详细内容,更多关于PHP连接MySQL故障排查的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













