【极全网】
出现504 Gateway Timeout错误,说明Nginx作为反向代理时,后端服务(如PHP-FPM、Tomcat等)未在Nginx设置的超时时间内完成响应。以下是完整的排查步骤和解决方案:
核心排查方向
后端服务处理超时
PHP/Python应用:长耗时操作(大数据处理/复杂查询)
数据库:慢查询或锁表
资源不足:CPU/内存耗尽导致进程卡死
Nginx配置问题
代理超时时间设置过短
上游服务器(如PHP-FPM)无响应
具体解决步骤
1. 检查Nginx超时配置
在Nginx配置文件中增加超时时间(如/etc/nginx/nginx.conf或站点配置文件):
location ~ \.php$ {
proxy_read_timeout 300s; # 关键:调大后端响应超时时间
proxy_connect_timeout 75s;
fastcgi_read_timeout 300s; # PHP-FPM场景
...
}
修改后重载配置:sudo nginx -s reload
2. 检查后端服务状态
PHP-FPM:
查看进程是否阻塞:
sudo systemctl status php-fpm
sudo tail -f /var/log/php-fpm/error.log # 检查错误日志调整PHP-FPM超时(
/etc/php-fpm.d/www.conf):request_terminate_timeout = 300 # 单位:秒,需大于Nginx的超时时间其他后端(如Tomcat): 检查应用日志(如
catalina.out),确认是否有线程阻塞或异常。
3. 检查服务器资源
实时资源监控:
top # 查看CPU/内存占用
free -h # 内存使用
df -h # 磁盘空间
dmesg | grep oom # 检查OOM(内存溢出)资源不足时:扩容服务器或优化应用(如减少数据库查询)。
4. 分析慢请求
数据库慢查询(如MySQL):
SHOW PROCESSLIST; # 查看当前连接
SET GLOBAL slow_query_log = 'ON'; # 开启慢查询日志代码优化:检查发布文章的代码逻辑(如循环操作、大文件上传)。
5. 网络问题排查
后端服务与Nginx的网络延迟:
ping <后端服务器IP>
traceroute <后端服务器IP>
6. 限流导致阻塞
检查Nginx或后端是否配置了并发限制:
location ~ \.php$ {
proxy_buffering off; # 关闭缓冲测试
proxy_max_temp_file_size 0; # 避免大文件缓冲超时
...
}
常见案例
WordPress发布文章504:
通常是PHP执行超时,需同时调整php.ini中的max_execution_time和PHP-FPM的request_terminate_timeout。文件上传超时:
增大client_max_body_size和proxy_read_timeout。
总结步骤
graph TD
A[出现504] --> B{检查Nginx超时配置}
B -->|调整后重载| C[检查后端服务状态/日志]
C --> D[优化代码/数据库]
D --> E[检查服务器资源]
E --> F[网络连通性测试]
F --> G[问题解决]
若仍无法解决,请提供:
Nginx配置片段
后端日志错误内容
top资源占用截图
我会进一步针对性分析!
扫一扫在手机打开






