1
leaves615 2023-06-22 19:08:22 +08:00
根据错误信息,是反代 nginx 在等待读取 upstream 的响应时,连接已断开。 初步判断是反代服务器到内网服务器的连接超时小于反代 nginx proxy read timeout 。
--- 看你配置,有两个时间配置不对等: keepalive_timeout 65; proxy_read_timeout 300s; |
2
mikaelson OP @leaves615
keepalive_timeout:65s ##设置 nginx 开启 keepalive ,超时时间为 65 秒,也就是说:如果客户端 65 秒内没有后续的请求过来,nginx 就会断掉这个 TCP 连接,设置为 0 表示禁用 keepalive 。 keepalive_requests :100 ##设置长连接能够处理请求的次数,100 表示:一个长连接 nginx 最多处理 100 次请求就会关闭。 这 2 个不对等好像不影响呀? |
3
q8515620 2023-06-22 20:55:52 +08:00 via Android
我也不懂,但你说的这两个跟 1 楼说的不一样
|
4
mikaelson OP @q8515620 只看了前半个,后半个看错了。
如果你的后端服务器响应时间较长,你可以考虑将 proxy_read_timeout 设置得比 keepalive_timeout 更大,以确保反向代理服务器有足够的时间读取完整的响应。 如果你希望尽快释放后端服务器的连接以释放资源,你可以将 keepalive_timeout 设置得比 proxy_read_timeout 更小,以便更快地关闭持久连接。 我觉得我这样设置也没错呀,如果 proxy_read_timeout 设置得比 keepalive_timeout 更大,那么反向代理服务器有足够的时间去读取完整的响应。这样理解应该没错呀。 |
5
splxsg 2023-06-24 01:05:24 +08:00
"upstream prematurely closed connection while reading response header from upstream" 这个错误通常发生在 Nginx 试图读取来自上游服务器的响应时,上游服务器已经关闭了连接。
这个问题可能的原因有很多种,包括: 应用服务器问题:您的 Java 应用可能存在某些问题,导致其无法正确响应请求,或者在响应过程中崩溃。这种情况下,你需要检查 Java 应用的日志,看看是否有任何错误或异常。 网络问题:网络连接不稳定或者带宽不足,也可能导致此问题。尤其是在你的场景中,内网服务器和腾讯云服务器之间的网络可能存在问题。可以尝试通过 ping 或者 traceroute 命令检查网络连接的稳定性。 配置问题:你的 Nginx 配置看起来没有什么问题,但是值得一试的是增加 proxy_read_timeout 的值。这个参数决定了 Nginx 等待上游服务器响应的时间。如果你的应用处理请求需要很长时间,那么可能需要增加这个值。例如,你可以尝试将其设置为 600s 或者更长。 还有,你可以在你的反向代理文件中添加 proxy_next_upstream 配置项,设置其值为 error timeout invalid_header http_500 http_502 http_503 http_504 ,这样,当遇到这些错误时,Nginx 将会尝试使用其他的服务器。 希望以上的建议能对你有所帮助。 |