nginx出现504错误的原因分析及解决

1 出现原因:

线上环境使用的是nginx代理到后端应用, 最近出现了一次导出2010年到2023年全部数据的出现了504,即网关超时(Gateway Time-out)错误。 正常情况下,是由于请求服务器超时引起。

通常有以下几种原因

  1. 程序处理大量数据,导致等待超时。nginx默认是60s超时,而后端处理超过60s、

  2. 程序调用外部请求,而外部响应慢或者超时。

  3. 代码质量问题,可能有慢sql,循环查询数据库等问题。


2 解决办法

1 解决代码里面的问题,修改代码才是王道!

2 可以适当配置下nginx调大proxy的相关超时时间,给后端应用多一点的处理时间, 但这时间不是越大越好,如果后端程序要很久才将结果返回nginx,说明程序还是需要优化。但可以先解决问题。

在nginx.conf的server的location里面新增以下配置,修改超时时间,重启nginx

1
2
3
4
# 调整到600s
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)默认60s
proxy_read_timeout 600; #后端服务器数据回传时间(代理发送超时)默认值60s
proxy_send_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)默认值60s


重新验证相同请求

验证成功。