504gatewaytimeout 电脑端报错解决方法

前几天打开一个常访问网站,浏览器弹出白底黑字提示504 Gateway Timeout。这个报错看着吓人,问题基本不在你的电脑。意思是,你访问网站的时候,网关或者代理服务器向后端业务服务器请求数据,后端长时间没有返回内容,网关等待超时,就返回504。简单理解,本地设备没有故障,网站后端卡住了。

普通用户碰到504,不用重装系统或者怀疑宽带。优先按F5刷新页面,很多时候只是瞬时流量拥堵,刷新就能恢复。刷新无效,换别的浏览器尝试,Chrome打不开就切换Edge或者Firefox,有时候浏览器缓存、插件干扰访问。还不行就清理浏览器缓存,频繁访问这个网站时,旧缓存数据可能和服务器数据冲突。代理或者VPN先关闭,不稳定代理线路会造成网关超时。电脑切换手机热点访问,如果手机网络可以打开网站,问题就在电脑本地网络设置或者代理。

504gatewaytimeout 电脑端报错解决方法

全部试完,只有这一个网站报504,其他网站正常,就不用继续排查本地设备。故障在网站服务器,可能访问量超出承载上限,后端程序卡死或者数据库连接异常。普通访问者只能等待,隔半小时重试。网站有客服联系方式,可以提交反馈,但多数情况只能等待运维修复。

如果你自己搭建网站,或是负责公司服务器维护,504就需要手动排查。最常见诱因是后端服务异常。比如Nginx做反向代理,后端运行PHP-FPM或者Node.js,PHP-FPM进程池耗尽、Node进程崩溃,Nginx收不到响应,抛出504。先登录服务器,执行ps aux查看后端进程状态,进程停止就重启。进程正常运行,执行top查看CPU、内存占用,资源打满就会拖慢请求。

Nginx自身超时参数也经常引发故障。默认proxy_read_timeout是60秒,如果后端处理请求需要两分钟,60秒时间一到Nginx断开连接返回504。修改Nginx配置,调大proxy_read_timeout、proxy_connect_timeout、proxy_send_timeout,例如设置成300秒。如果使用PHP-FPM,同步调整fastcgi_read_timeout。修改配置之后执行nginx -t校验配置文件,再执行nginx -s reload重载。

数据库响应缓慢也会触发504。后端程序查询数据库,数据库响应延迟,请求卡住,网关等待超时。查看数据库慢查询日志,确认是否存在缺少索引的SQL语句拖慢查询。服务器负载过高,CPU长期满载,所有请求处理都会变慢。uptime查看负载数值,如果远超CPU核心数量,代表资源不足,要么升级服务器配置,要么优化业务代码。

防火墙和安全组偶尔会造成这个问题。后端服务监听端口没有在防火墙放行,Nginx无法连接后端,报错connection refused或者timeout。检查iptables或者云服务器安全组,确认内网端口放行。Docker环境下容器网络更容易出错,确认Nginx容器能够访问应用容器IP与端口。

可以固定一套排查流程。优先查看Nginx错误日志,tail -f /var/log/nginx/error.log,日志会写明连接超时或者连接拒绝。连接超时,排查后端进程和超时参数;连接拒绝,检查端口和防火墙。Nginx日志没有有效信息,查看后端程序日志,PHP error log、Node pm2 log或者journalctl -u 服务名,日志里面一般留有线索。

临时恢复可以重启相关服务,systemctl restart nginx和systemctl restart php-fpm轮流执行,很多时候网站恢复访问。但不找到根本原因,故障会再次出现。流量上涨就触发504,大多是资源不足或者配置不合理,重启只是临时缓解。对访客而言504只能等待;站长遇到504,核心动作就是查日志、调参数、扩容资源,没有特别复杂的原理。

免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。

相关推荐

502badgateway 含义以及报错解决办法

502 Bad Gateway 这个报错,但凡自己搭过网站或者折腾过服务器的人,迟早都会撞上。浏览器上就一行白底黑字,冷冰冰的,但背后的原因五花八门。简单说,它就是网关或者代理服务器从上游服务器收到