Nginx 502錯誤本質是Nginx作為反向代理時,無法從上游服務器(如PHP-FPM、Node.js、Tomcat等)獲取有效響應,常見于后端服務故障、配置錯誤或網絡問題。以下是結合日志分析與實操的系統性解決步驟:
Nginx錯誤日志是定位502錯誤的“指南針”,通常位于/var/log/nginx/error.log
(路徑可通過nginx -V
確認)。通過日志中的具體錯誤信息,可快速鎖定問題根源:
connect() failed (111: Connection refused)
:說明Nginx無法連接到上游服務器(如PHP-FPM未啟動或端口錯誤);upstream timed out
:說明上游服務器響應超時(需調整超時設置);Permission denied
:說明權限問題(如套接字文件或目錄權限不足)。502錯誤的常見原因是上游服務器未運行或崩潰。需檢查上游服務的狀態:
systemctl status php-fpm
(或service php-fpm status
),若未運行則啟動:systemctl start php-fpm
;ps aux | grep node
(或grep python
)查看進程是否存在,若不存在則重啟應用(如pm2 restart app
)。配置錯誤是502錯誤的“隱形殺手”,需重點檢查以下內容:
proxy_pass
/fastcgi_pass
指令:確保Nginx配置中的上游地址與上游服務器實際監聽地址一致。例如:
fastcgi_pass unix:/run/php/php-fpm.sock;
;proxy_pass http://127.0.0.1:8080;
;8080
,上游實際監聽9000
)。網絡問題或防火墻阻斷會導致Nginx無法訪問上游服務器,需通過以下命令驗證:
ping <上游服務器IP>
,確認網絡可達;telnet <上游服務器IP> <端口>
(或nc -zv <IP> <端口>
),若無法連接,需檢查防火墻規則:
ufw allow <端口>
;firewall-cmd --add-port=<端口>/tcp --permanent
+ firewall-cmd --reload
。若上游服務器處理請求較慢(如復雜查詢、大文件上傳),默認超時時間(通常60秒內)可能導致502錯誤。需在Nginx配置中增加超時參數(位于http
、server
或location
塊中):
proxy_connect_timeout 300s; # 連接上游服務器的超時時間
proxy_send_timeout 300s; # 向上游服務器發送請求的超時時間
proxy_read_timeout 300s; # 從上游服務器讀取響應的超時時間
fastcgi_read_timeout 300s; # 若使用PHP-FPM,需同步調整
修改后需重載Nginx:systemctl reload nginx
。
服務器資源耗盡(如CPU、內存、文件句柄)會導致上游服務器無法響應,需通過以下命令排查:
top
(查看CPU使用率)、free -h
(查看內存使用率);ulimit -n
(查看當前用戶的最大文件句柄數),若過?。ㄈ缒J1024),可修改/etc/security/limits.conf
(添加* soft nofile 65535
、* hard nofile 65535
)并重啟服務。若Nginx日志未明確錯誤,需查看上游應用的日志(如PHP-FPM的/var/log/php-fpm.log
、Node.js的app.log
),從中獲取更詳細的錯誤信息(如代碼異常、數據庫連接失?。?。例如,PHP-FPM日志中的WARNING: [pool www] child exited with code 1
,說明PHP進程異常退出,需檢查PHP代碼或擴展兼容性。
www-data
、nginx
)有權訪問上游服務器的相關目錄或套接字文件(如/run/php/php-fpm.sock
的權限應為660
,所屬組為Nginx用戶組);fastcgi_buffer_size 64k; fastcgi_buffers 16 64k;
);netstat -antp
查看異常連接數),可使用防火墻限制IP訪問頻率。通過以上步驟逐一排查,可快速定位并解決Nginx 502錯誤。需注意,日志分析是核心,結合上下游服務的狀態與配置,能有效縮短排查時間。