我们具有上面的配置,其中服务器最多处理100个并发请求,其中一些请求相当大:单个请求(不使用多部分等)时,有效负载高达3-4MB
这工作正常,但有时我们会从nginx收到错误消息:
HTTP 502 "Bad Gateway"
在访问日志中,我们看到
writev() failed (104: Connection reset by peer) while sending request to upstream
或:recv() failed (104: Connection reset by peer) while reading response header from upstream
在Java(Jetty / Dropwizard)服务器上没有错误。
我们认为这是由于Jetty太早关闭连接而造成的,也许甚至在接收数据完成之前就发送了响应?!
我们尝试增加nginx上的缓冲区大小:
client_max_body_size 24M;
client_body_buffer_size 128k;
并降低了keep_alive空闲超时时间(60-> 25秒),以避免码头提前关闭它的情况(30秒超时):
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 25;
这没有改变。 标头不应太大。和99.9%的请求均按预期方式工作(所有请求均相似)。
一个奇怪的事情是,在升级Dropwizard(1.2.2-> 1.3.5)和Jetty(9.4.7-> 9.4.11)之后,错误发生率提高了20倍。
我想知道下一步应该怎么做? 可能发生了什么/我们可以尝试解决的陷阱?