当前位置: 代码网 > 服务器>服务器>Nginx > Nginx报:Nginx - 504 Gateway Time-out问题解决办法

Nginx报:Nginx - 504 Gateway Time-out问题解决办法

2024年05月19日 Nginx 我要评论
问题背景线上有个系统,最前端是设置了nginx作为代理,有个1个请求的接口需要耗时1.1分钟左右,老是出现nginx - 504 gateway time-out的错误。问题分析绕过nginx直接访问

问题背景

线上有个系统,最前端是设置了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。

其他问题:

如果你遇到异常

illegalstateexception – if the getoutputstream method has already been called for this response object

那就说明你的程序中有地方调用过了,response.getoutputstream();

只需要与已有程序保持一致使用outputstream即可。

即将response.getwriter() 提换成 response.getoutputstream();

原因简单来讲就是这两个方法互斥。调用了一个就不能调用另一个。

总结

到此这篇关于nginx报:nginx - 504 gateway time-out问题解决办法的文章就介绍到这了,更多相关nginx - 504 gateway time-out内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com