目录
问题背景
问题分析
解决方法
拓展知识
问题背景
线上有个系统,最前端是设置了nginx作为代理,有个1个请求的接口需要耗时1.1分钟左右,老是出现Nginx – 504 Gateway Time-out的错误。
问题分析
绕过nginx直接访问应用tomcat直接的端口进行相同条件测试,发现没有问题,排除接口和系统的问题,那么问题就是nginx超时参数配置的问题,很多参数没有指定的情况默认都是60S,所以应该是这个原因。
解决方法
在nginx加入下面配置,可以解决Nginx – 504 Gateway Time-out问题
默认60秒超时
http {
#配置在该区域会影响所有的server块 以下解决nginx 504问题
proxy_connect_timeout 600; #单位秒 默认60
proxy_send_timeout 600; #单位秒 默认60
proxy_read_timeout 600; #单位秒 默认60
}
location / {
# 以下解决nginx 504问题
proxy_send_timeout 600; #单位秒 默认60
proxy_read_timeout 600; #单位秒 默认60
proxy_connect_timeout 600; #单位秒 默认60
}
拓展知识
proxy_connect_timeouttime:与后端/上游服务器建立连接的超时时间,默认为60s,此时间不超过75s。
proxy_read_timeout time:设置从后端/上游服务器读取响应的超时时间,默认为60s,此超时时间指的是两次成功读操作间隔时间,而不是读取整个响应体的超时时间,如果在此超时时间内上游服务器没有发送任何响应,则Nginx关闭此连接。
proxy_send_timeout time:设置往后端/上游服务器发送请求的超时时间,默认为60s,此超时时间指的是两次成功写操作间隔时间,而不是发送整个请求的超时时间,如果在此超时时间内上游服务器没有接收任何响应,则Nginx关闭此连接。
client_header_timeout:默认60s。指定等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1).仅当在一次read中,没有收到请求头,才会算成超时。如果在超时时间内,client没发送任何东西,nginx返回HTTP状态码408(“Request timed out”)
client_body_timeout:默认60s。