您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。