回答
收藏
分享
举报
nginx 反向代理与后端server无法保持长连接
提问于2021-06-21 15:44

浏览 1.4k

nginx的版本为:nginx version: openresty/1.15.8.3

nginx的后端转发配置如下:

            proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Original-Host $host;
proxy_set_header Host "xxx.xxxl";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Req-Msec $msec;
proxy_set_header X-SSP-NAME "xxx.xxxk";
proxy_set_header X-FROM-LOCATION "xx";

但是通过抓包发现nginx向后端转发的时候,每次请求还是需要新建TCP,没有保持长连接,如下图:

感谢指教~

已修改于2023-03-06 04:37



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

使用keepalive建立长连接池:

upstream http_backend {
    server 127.0.0.1:8080;

    keepalive 16;
}

server {
    ...

    location /http/ {
        proxy_pass http://http_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        ...
    }
}
赞同

1

回复举报

回答于2021-06-21 16:18



回复陶辉
回复
baru回复了

首先感谢陶老师~

        其实在upstream的连接池中,已经配置了。我也看了相关资料,这个参数(keepalive xx)配置不当会出现连接来回新建和关闭的震荡问题。不过我来回调整了这个参数,并持续观察了一段时间,抓包还是有很多SYN 报文,长连接配置没有生效。

0

回复举报

回答于2021-06-22 10:12



回复baru
回复
陶辉回复了baru

长连接是HTTP层的概念,因此它会受到client/server双向HTTP框架的影响。在Nginx客户端是由keepalive_timeout 60s;控制的,在上游服务器端也会有类似参数,与具体Server相关,其中长连接保持时间是二者最小值。

如果你抓包,需要先看原连接是谁在关闭,而不是只去看Nginx创建新连接

2

回复举报

回答于2021-06-23 01:22



回复陶辉
回复
提问者
baru
这家伙很懒还未留下介绍~
0
文章
3
问答
0
粉丝
相关问答

不转化成IP没有办法连接呀?可以考虑使用动态DNS,这样服务器的IP即使变化也可以很快检测到。

点赞 0
浏览 801

抓包对比下,包括:

1、不使用Nginx时,抓包看下Websocket的握手,包括在浏览器和Nginx上游服务上;

2、使用Nginx时,抓包看下Nginx上游服务。

从你的错误请求来看,貌似url的匹配出问题了,正常应该是返回101,但你返回 了404

点赞 0
浏览 2.3k

是更项目打包的路径有关系吗?

点赞 0
浏览 967