访问网站长时间等待后出现 504 Gateway Timeout,表示前端代理把请求转发给后端后,后端在规定时间内没有返回结果。与 502 不同,504 说明后端活着但处理太慢。
可能原因
- 后端执行了慢查询或耗时操作(大文件处理、复杂计算);
- 服务器 CPU/IO 负载过高,整体处理变慢;
- 后端连接数耗尽,请求排队;
- 代理超时时间设置过短。
排查步骤
- 观察服务器负载:
top
free -m
iostat -x 2 3
负载很高先找出元凶进程。
- 查看后端日志,找出执行时间长的请求:
tail -n 50 /var/log/php-fpm/error.log
# 开启慢日志后
tail -n 50 /var/log/php-fpm/www-slow.log
- 数据库慢查询是常见原因,可临时开启 MySQL 慢查询日志定位:
SHOW FULL PROCESSLIST;
- 确认是哪个 URL 触发 504:后台任务、导出、统计类请求耗时属正常,可改为异步处理。
- 如确认程序本身需要较长时间,可适当调大 Nginx 的
proxy_read_timeout与后端的max_execution_time。
提示:单纯调大超时只是掩盖问题,根治仍需优化慢查询与耗时逻辑。
仍未解决
请通过「支持服务 → 工单」反馈,附上触发 504 的 URL、服务器负载截图、后端慢日志片段与出现频率,客服将协助分析。