Http 为什么nginx proxy\u pass关闭我的连接?
文件中说: 设置代理的HTTP协议版本。默认情况下,使用版本1.0。建议将1.1版用于keepalive连接和NTLM身份验证 在我的nginx配置中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
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倍的错误时,可能会发生这种情况。数据包捕获可以向您显示是否存在这种情况。