首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

CentOS 下 PHP 連接 127.0.0.1 失敗:SELinux 阻擋 httpd 網路連線的解決方案

     編輯:MySQL 綜合教學

錯誤現象

PHP 腳本在 CLI 執行正常,但透過瀏覽器(Apache + mod_php)訪問時回報:

Could not connect: Can't connect to MySQL server on '127.0.0.1' (13) 2003

錯誤碼 13 代表 EACCES(權限被拒),非網路不通。

根因分析:SELinux 布林值限制

CentOS 預設啟用 SELinux,限制 httpd 進程發起網路連線:

getsebool -a | grep httpd
# 輸出關鍵行:
httpd_can_network_connect --> off

解決方案

方案一:開啟對應布林值(推薦,最小權限原則)

setsebool -P httpd_can_network_connect 1

-P 參數使設定永久生效(重開機不失效)。

方案二:關閉 SELinux(不推薦生產環境)

# 臨時關閉
setenforce 0

# 永久關閉(需重啟)
vi /etc/selinux/config
# SELINUX=enforcing → SELINUX=disabled

方案三:關閉防火牆(配合排查)

chkconfig --level 12345 iptables off
chkconfig --level 12345 ip6tables off
service iptables stop
service ip6tables stop

驗證步驟

  1. 執行 setsebool -P httpd_can_network_connect 1。
  2. 重啟 Apache:service httpd restart。
  3. 瀏覽器重新訪問 PHP 頁面,確認連線成功。

SELinux 狀態查詢指令

指令用途
/usr/sbin/sestatus -v詳細狀態,SELinux status: enabled 表示開啟
getenforce快速查看:Enforcing/Permissive/Disabled
getsebool -a | grep httpd列出所有 httpd 相關布林值

延伸知識:常見 httpd 布林值

  • httpd_can_network_connect_db:允許連接資料庫端口(3306, 5432 等)。
  • httpd_can_sendmail:允許發送郵件。
  • httpd_enable_cgi:允許執行 CGI 腳本。
  • httpd_unified:統一讀寫權限(舊版相容)。

小結

CentOS 上 PHP CLI 正常但 Web 請求無法連 MySQL,90% 是 SELinux httpd_can_network_connect 為 off。使用 setsebool -P 開啟即可,既保留 SELinux 安全性又解決業務阻塞。生產環境請勿直接關閉 SELinux,應配合審計日誌分析並精準放行所需權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved