504 Gateway Timeout 的定位与修复
网关返回 504 Gateway Timeout,表示它已经连上上游,但在超时时间内没有拿到完整响应。和 502 不同,504 通常是后端太慢,而不是完全不可达。
curl -v -w '\n total=%{time_total}\n' http://<gateway>/<path>
tail -f /var/log/nginx/error.log
grep -i 'upstream timed out' /var/log/nginx/error.log
journalctl -u <backend> --since '10 min ago'
ss -lntp | grep ':<backend-port>'
proxy_read_timeout/proxy_connect_timeout 太短。curl 直连后端测耗时,再对比经过网关的耗时。curl — 分段测耗时nginx — 网关超时配置journalctl — 后端日志ss — 后端连接状态合上页面,先回答,再展开对照。
curl 直连后端测耗时,再对比经过网关的耗时。同时看 proxy_read_timeout/proxy_connect_timeout。