首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 5.3.29 升級導致 Nginx 502 Bad Gateway:Unix Socket 權限問題根因與修復

     編輯:PHP 相關知識

現象

  • PHP 5.3.28 → 5.3.29 升級後,網站全部 PHP 頁面回傳 502 Bad Gateway
  • 靜態資源 (CSS/JS/圖片) 正常
  • Nginx 錯誤日誌:connect() to unix:/tmp/php-cgi.sock failed (13: Permission denied)
  • PHP-FPM 進程正常運行,未異常退出

排查過程

  1. 懷疑 PHP-FPM 異常退出 → 進程存在,排除
  2. 懷疑 Nginx 連不上 FastCGI → 改用 TCP 127.0.0.1:9000 → 正常!確認為 Unix Socket 通訊問題
  3. 檢查 Socket 檔案權限:
    ls -l /tmp/php-cgi.sock
    # 5.3.28: srw-rw-rw- 1 root root 0 ...  (666)
    # 5.3.29: srwx------ 1 root root 0 ...  (700)  <-- 權限變更!
  4. 臨時 chmod 777 /tmp/php-cgi.sock → 立即恢復正常
  5. 重啟 PHP-FPM → 權限又變回 700,確認是預設行為變更

根因

PHP 5.3.29 (5.3 系列最後版本) 修改了 Unix Socket 預設建立權限:從 **0666 (rw-rw-rw-)** 改為 **0700 (rwx------)**。導致 Nginx Worker 進程 (通常為 www-data/nginx 用戶) 無讀寫權限,連線失敗回傳 502。

永久修復:php-fpm.conf 顯式配置

; /usr/local/php/etc/php-fpm.conf (或 pool.d/www.conf)

[www]
user = www
group = www

; 關鍵三項:指定 Socket 擁有者、群組、權限
listen = /tmp/php-cgi.sock
listen.owner = www
listen.group = www
listen.mode = 0666

; 其他常用設定
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

驗證修復

# 重載 PHP-FPM
/usr/local/php/sbin/php-fpm --reload

# 檢查 Socket 權限
ls -l /tmp/php-cgi.sock
# 應顯示: srw-rw-rw- 1 www www 0 ...

# 測試網站
curl -I https://your-domain.com/
# HTTP/1.1 200 OK

補充:TCP 模式替代方案 (不推薦生產高併發)

; php-fpm.conf
listen = 127.0.0.1:9000

; nginx.conf
fastcgi_pass 127.0.0.1:9000;
  • 優點:避開檔案系統權限問題
  • 缺點:經過 TCP 協議棧,額外開銷 (本機回環約 10-20% 延遲增加),高併發下易產生 TIME_WAIT 佔用埠口
  • 建議:修復 Unix Socket 權限為首選,性能更優

版本升級最佳實踐

  1. **讀取釋出說明** (Release Notes/ChangeLog) 關注 Breaking Changes
  2. **測試環境先行** 完整跑測試套件、壓力測試
  3. **保留回滾方案**:備份舊版本二進制、配置檔、資料庫
  4. **關鍵配置顯式化**:不依賴預設值 (如 listen.mode、date.timezone、cgi.fix_pathinfo)
  5. **監控告警**:部署後 30 分鐘重點觀察錯誤率、延遲、502 率
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved