2
Nginx proxy_read_timeout与proxy_connect_timeout
我已经开始将Nginx用作一组提供某种服务的服务器的反向代理。 该服务有时可能很慢(它在Java上运行,并且JVM有时会陷入“完全垃圾收集”,可能需要几秒钟的时间),因此我将其设置proxy_connect_timeout为2秒,这将使Nginx有足够的时间来确定知道该服务停留在GC上并且不会及时响应,因此应将请求传递给其他服务器。 proxy_read_timeout如果服务本身花费太多时间来计算响应,我还设置了防止反向代理卡住的方法-再次,它应将请求移至另一台服务器,该服务器应有足够的空闲时间以返回及时的响应。 我已经运行了一些基准测试,并且可以清楚地看到proxy_connect_timeout,由于服务被卡住并且不接受传入连接(该服务使用Jetty作为嵌入式),一些请求恰好在连接超时指定的时间返回,因此工作正常servlet容器)。这proxy_read_timeout也有效,因为我可以看到在此处指定的超时后返回的请求。 问题是proxy_read_timeout + proxy_connect_timeout,如果服务被卡住,并且当Nginx尝试访问它时,但在Nginx可以超时之前-它被释放,我本来希望看到一些请求在超时后或差不多该时间长度内超时。并开始处理,但速度太慢,由于读取超时,Nginx将中止。我认为该服务有这种情况,但是在运行多个基准测试后,总共发出了数百万个请求-我看不到单个请求返回的任何值都超过上述值proxy_read_timeout(这是较大的超时)。 我很乐意对此问题发表任何评论,尽管我认为这可能是由于Nginx中的错误(我尚未查看代码,所以这只是一个假设),连接后超时计数器不会重置如果Nginx没有从上游服务器读取任何内容,则表示成功。