nginx 反向代理与后端server无法保持长连接

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,没有保持长连接,如下图:

感谢指教~

邀请回答
提问于 2021-06-21 15:44
267 次浏览
共1个回答

发表评论
  • 陶辉
    2021-06-21 16:18

    使用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
    回复
    举报
    • baru 2021-06-22 18:12

      首先感谢陶老师~

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

      0
      回复
      举报
    • 陶辉 回复 baru 2021-06-23 09:22

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

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

      1
      回复
      举报
提问者

baru

nginx 菜鸟

  • 0

    文章

  • 0

    粉丝

  • 1

    被赞

baru
按Enter键发送
您已邀请位用户
Copyright 公安部网络安全保卫局 All Rights Reserved
京公网安备 11010502047880号    京ICP备05070602号