PHP-FPM(FastCGI Process Manager)是PHP 在高並發環境下的重要執行引擎,廣泛用於Nginx 作為後端支持。出現502 Bad Gateway錯誤,通常表示Nginx 與PHP-FPM 之間的通信出現中斷或異常響應,本文將從多個方面介紹可能的原因和優化方案。
在高負載場景下,PHP-FPM 進程可能因資源耗盡或配置不當崩潰,導致無法處理請求,產生502 錯誤。此時可以查看進程狀態並嘗試重啟服務:
$ systemctl status php-fpm
$ systemctl restart php-fpm
若PHP-FPM 的進程池(pool)參數設置不當,如max_children設置過小,可能導致請求被阻塞或拒絕。建議檢查並優化如下配置:
$ vim /etc/php-fpm.d/www.conf
推薦配置如下:
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
當PHP 腳本處理時間過長時,如處理大文件或複雜業務邏輯,默認的超時設置可能不夠,從而中斷與Nginx 的連接。
可通過以下方式延長連接超時時間:
$ vim /etc/php-fpm.d/www.conf
設置建議:
request_terminate_timeout = 180
若Nginx 配置文件中的FastCGI 路徑或參數設置不正確,會導致請求無法成功傳遞至PHP-FPM,觸發502 報錯。
請檢查nginx.conf中PHP 請求的location 配置:
$ vim /etc/nginx/nginx.conf
正確的配置示例:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
如果服務器的內存或CPU 資源被大量佔用,PHP-FPM 無法創建新進程響應請求,也會造成502 錯誤。
可通過如下命令監控服務器資源使用情況:
$ top
$ free -m
如確認資源不足,可考慮升級硬件配置,或通過優化代碼與緩存機制降低資源消耗。
解決PHP-FPM 報502 錯誤需綜合考慮進程狀態、配置參數、請求處理時間、Nginx 與PHP-FPM 的通信路徑,以及服務器本身的資源使用情況。通過合理配置與資源優化,不僅可以避免502 錯誤,還能提升整體服務的穩定性和響應速度。