Http 为什么nginx proxy\u pass关闭我的连接?

Http 为什么nginx proxy\u pass关闭我的连接?,http,nginx,proxypass,Http,Nginx,Proxypass,文件中说: 设置代理的HTTP协议版本。默认情况下,使用版本1.0。建议将1.1版用于keepalive连接和NTLM身份验证 在我的nginx配置中 location / { proxy_http_version 1.1; proxy_pass http://127.0.0.1:1980; } 直接操作时,我可以看到我的应用程序在一个连接上获得多个请求(当我刷新时)。这是我的回复 HTTP/1.1 200正常\n内容类型:text/html\n

文件中说:

设置代理的HTTP协议版本。默认情况下,使用版本1.0。建议将1.1版用于keepalive连接和NTLM身份验证

在我的nginx配置中

    location / {
        proxy_http_version 1.1;
        proxy_pass http://127.0.0.1:1980;
    }
直接操作时,我可以看到我的应用程序在一个连接上获得多个请求(当我刷新时)。这是我的回复

HTTP/1.1 200正常\n内容类型:text/html\n内容长度:14\n连接:保持活动\n\n Hello World

但是,nginx发出一个请求并将其关闭。什么?我可以看到nginx发送“Connection:keep-alive”头。我可以看到它添加了服务器和日期标题。我尝试添加
proxy\u set\u头连接“keep alive”但这没有帮助


如何使nginx不关闭每个线程的连接?

为了使nginx保持连接活动,需要以下配置:

  • 配置适当的标头(HTTP 1.1和连接标头不包含“Close”值,实际值无关紧要,保持活动状态或仅为空值)

  • 使用带有keepalive指令的上游块,仅使用代理传递url将无法工作

  • 源服务器应已启用保持活动状态

因此,以下Nginx配置使keepalive为您工作:

upstream { 
  server 127.0.0.1:1980; 
  keepalive 64; 
}; 

server { 
  location / { 
    proxy_pass http://upstream; 
    proxy_set_header Connection ""; 
    proxy_http_version 1.1; 
  } 
}
请确保您的源服务器未完成连接,根据:

TCP连接可以通过两种方式终止:(1)正常TCP关闭 使用FIN握手的序列,以及(2)一个“中止”,其中一个或多个 发送更多的RST段,并立即恢复连接状态 丢弃的。如果远程站点关闭了TCP连接,则本地 必须告知应用程序它是正常关闭还是关闭 流产了


更多详细信息可在on Stackoverflow中找到。

应在上游块中启用keepalive,而不是直接代理传递

对于HTTP,proxy_HTTP_version指令应设置为“1.1”,并且应清除“Connection”头字段

像这样:

upstream keepalive-upstream {
    server 127.0.0.1:1980;
    keepalive 23;
}

 location / {
    proxy_http_version 1.1;
    proxy_set_header Connection ""; 
    proxy_pass http://keepalive-upstream;
}

您好,我下面的回答是否解决了您的问题?是否可以在没有
上游
块的情况下保持上游keepalive?在这种情况下,我们根据一个变量动态地分配proxy_pass值(例如,
proxy\u-pass https://$new\u-server:$new\u-port;
@DropPhone您有没有找到您的问题的答案?我想知道同样的问题?
keepalive 64;
做什么?64是保持连接活动的时间吗?@LibbyLebyane这是“到上游服务器的最大空闲keepalive连接数”,请参阅。请记住,上游服务器也可能选择关闭连接。当遇到50倍的错误时,可能会发生这种情况。数据包捕获可以向您显示是否存在这种情况。