# nginx 504故障排查方法是什么
## 概述
504 Gateway Timeout是HTTP協議中的一種服務器錯誤狀態碼,表示作為網關或代理的服務器未能及時從上游服務器(如PHP-FPM、Tomcat等)收到響應。當Nginx作為反向代理時出現504錯誤,通常意味著后端服務響應超時。本文將系統性地介紹排查和解決方法。
---
## 一、快速確認問題現象
1. **檢查瀏覽器返回信息**
確認錯誤頁面顯示`504 Gateway Timeout`,而非其他5xx錯誤。
2. **查看Nginx訪問日志**
```bash
grep "504" /var/log/nginx/access.log
記錄高頻出現504的請求路徑和上游服務器IP。
tail -n 50 /var/log/nginx/error.log | grep -i "timeout"
重點關注upstream timed out相關報錯。Nginx與上游服務器的超時設置直接影響504的出現:
location / {
proxy_pass http://backend;
proxy_connect_timeout 60s; # 連接上游超時時間
proxy_send_timeout 60s; # 發送請求超時時間
proxy_read_timeout 60s; # 讀取響應超時時間
}
建議值:
- 常規業務:30-60秒
- 長任務場景:按需調整至300秒以上
upstream backend {
server 10.0.0.1:8080;
keepalive 32; # 保持的連接數
keepalive_timeout 60s; # 連接保持時間
}
location ~ \.php$ {
fastcgi_read_timeout 300s; # 默認60秒
fastcgi_pass unix:/run/php/php-fpm.sock;
}
# 直接訪問后端接口
curl -v http://backend:8080/api/test
# 測試數據庫連接
mysql -h db_host -u user -p -e "SELECT 1"
# CPU/內存監控
top -c
free -h
# 檢查進程阻塞
strace -p <PID> -T
# Java應用
tail -f /var/log/tomcat/catalina.out
# PHP應用
tail -f /var/log/php-fpm.log
ping backend_server
traceroute backend_server
telnet backend_server 8080
iptables -L -n
ufw status
# 查看TCP連接狀態
ss -antp | grep 'backend_ip'
# 統計504時間段的連接數
awk -F'[: ]+' '$9==504 {print $4}' access.log | sort | uniq -c
# 增加臨時緩沖區
proxy_buffer_size 128k;
proxy_buffers 4 256k;
# 禁用響應緩沖(大文件場景)
proxy_buffering off;
upstream backend {
least_conn; # 最小連接數策略
server 10.0.0.1 weight=5;
server 10.0.0.2 max_fails=3 fail_timeout=30s;
}
location ~* \.(jpg|css|js)$ {
expires 7d;
add_header Cache-Control "public";
}
tcpdump抓包分析
tcpdump -i eth0 host backend_ip -w /tmp/debug.pcap
Nginx調試模式
重新編譯Nginx時添加--with-debug參數,獲取詳細調試日志。
SystemTap動態追蹤
分析Nginx與后端服務的完整交互過程。
| 場景 | 解決方法 |
|---|---|
| 后端處理時間過長 | 調整proxy_read_timeout至合理值 |
| 后端服務崩潰 | 實現健康檢查,自動剔除故障節點 |
| 數據庫查詢慢 | 優化SQL,添加適當索引 |
| 網絡延遲高 | 考慮CDN或同機房部署 |
504錯誤的排查需要系統性地檢查Nginx配置、后端服務狀態和網絡環境。建議通過監控系統提前發現超時趨勢,而非被動響應。對于關鍵業務,應考慮實現熔斷機制和優雅降級策略。
提示:生產環境修改配置后,務必使用
nginx -t測試語法,并通過systemctl reload nginx平滑重啟。 “`
該文檔包含約1100字,采用Markdown格式,包含代碼塊、表格、列表等結構化元素,符合技術文檔規范。內容覆蓋從基礎檢查到高級診斷的完整排查流程,并提供了可直接執行的命令示例。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。