客户端在发送到客户端时,在nginx中关闭过早连接

Ale*_*sey 31 nginx

我在nginx error.log中有错误:

2010/12/05 17:11:49 [info] 7736#0: *1108 client closed prematurely connection while sending to client, 
client: 188.72.80.201, server:***.biz, request: "GET /forum/ HTTP/1.1", 
upstream:"http://***:3000/forum/", host: "***.biz"
Run Code Online (Sandbox Code Playgroud)

我每次都有500个响应代码.我怎样才能解决这个问题?

谢谢.

tim*_*urb 17

设置[proxy_ignore_client_abort on;][1]可能会帮助你.

  • 任何人都在意解释为什么会解决这个问题? (9认同)
  • 这对我来说 (2认同)

Hen*_*nar 13

我今天长时间处理这个问题并找到了解决方案:
请注意,此修复只会在使用负载均衡器时影响您

检查负载均衡器空闲超时.我将ELB空闲超时设置为60秒(默认),并且当请求挂起时,它在给定时间后关闭连接.但由于ELB在nginx之前,nginx正在记录"客户端"(在本例中为ELB),正在关闭连接.

因此,如果您使用的是ELB,请转到:
EC2 - > Load Balancers - >选择正确的 - >在说明中向下滚动并在使用其他负载均衡器时更改空闲超时,检查其配置和超时.

另请注意,您仍可能需要更改代理超时等.


Iva*_*rov 7

我发现如果你关闭代理缓冲区有帮助

http {
   proxy_buffering off;
...
}
Run Code Online (Sandbox Code Playgroud)

可能缓冲区太小或太少.更改缓冲区大小后,它很好用

proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 2048 8k;
Run Code Online (Sandbox Code Playgroud)


van*_*ome 6

我遇到了同样的问题并对其进行了研究。就我而言,这只发生在 Webkit (Chrome) 浏览器中。如果您只加载单个资源,它们会乐观地打开比所需更多的连接。在这种情况下,多余的连接会被不正常地关闭,或者至少没有通过它发送任何 HTTP 动词。这会导致 nginx 中提到的错误。

关于#1 答案:建议的解决方案都没有帮助,这是合乎逻辑的,因为这与代理无关。

关于#2 答案:proxy_ignore_client_abort on; 难道不是在我的测试帮助。

不幸的是,我发现除了使用之外没有其他解决方案

error_log 关闭;