nginx 长连接
  L83A5jZvvg3Q 2023年11月22日 14 0
一、短连接 与 长连接
      • 短连接
      当客户端通过浏览器访问 HTTP 服务器时,HTTP 请求会通过 TCP 协议与 HTTP 服务器建立一条访问通道,当本次访问数据传输完毕后,该 TCP 连接会立即被断开,由于这个连接存在的时间很短,所以 HTTP 连接
      也被称为短连接。默认配置下,HTTP 协议的负载均衡与上游服务器组中被代理的连接都是 HTTP/1.0 版本的短连接。
      
      • 长连接
      在 HTTP/1.1 版本中默认开启 Connection:keep-alive,实现了 HTTP 协议的长连接,可以在一个 TCP 连接中传输多个 HTTP 请求和响应,减少了建立和关闭 TCP 连接的消耗和延迟,提高了传输效率。网络应用中,
      每个网络请求都会打开一个 TCP 连接,基于上层的软件会根据需要决定这个连接的保持或关闭。例如,FTP 协议的底层也是TCP,是长连接。
  查看长连接
      1、列出建立连接的 IP
          # netstat -anp | grep nginx
              tcp        0      0 172.16.3.40:81          172.16.2.84:56049       ESTABLISHED 1709/nginx: worker
          # netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1
  
      2、查看该ip是否为长连接
          # tcpdump -i ens33 -A host 172.16.3.40 -n | grep HTTP
二、client到nginx的长连接
      默认情况下,nginx已经开启了对client的keepalive支持,但一些场景下,仍然需要我们手动调整参数重写一下:
      
              http {
                      keepalive_timeout        300;              # 客户端连接nginx服务器超时值,默认75s
                      keepalive_request        2000;             # 每条长连接最大复用请求数为2000
              }
三、nginx到server的长连接
      http {
          upstream BACKEND{
              server 192.168.0.1:8080 weight=1 max_false=2 fail_timeout=30s;
              server 192.168.0.2:8080 weight=1 max_false=2 fail_timeout=30s;
              keepalive 300;                        # 连接池里面最大的空闲连接数量
  
          }
          server{
                  listen 8080 default_server;
                  server_name:"";
                  location / {
                      proxy_pass http://BACKEND
                      proxy_set_header Host $Host;
                      proxy_set_header x-forwarded-for $remote_addr;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header Cache-Control no-store;
                      add_header Pragma no-cache;
                      proxy_http_version 1.1;                             # 启用HTTP/1.1版本与被代理服务器建立连接,1.0版本不支持长连接,很重要!
                      proxy_set_header Connection "";                     # 设置http头默认为长连接,不关闭
                  }
          }
      }
四、对于 FastCGI 协议服务器,需要设置 fastcgi_keep_conn 指令启用长连接支持。
      upstream fastcgi_backend {
          server 192.168.2.154:9000;
          server 192.168.2.109:9000;
          keepalive 8;                             # 长连接缓存池大小为8
      }
      
      server {
          ...
          location /fastcgi/ {
              fastcgi_pass fastcgi_backend;
              fastcgi_keep_conn on;               # 启用长连接支持
              ...
          }
      }
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月22日 0

暂无评论

推荐阅读
  38gcbVXUBcLA   2023年11月26日   18   0   0 服务器htmlHTTP
  4Txe79BjyroE   2023年12月08日   11   0   0 TCP
  38gcbVXUBcLA   2023年11月24日   17   0   0 服务器客户端HTTP
  KRsXEGSB49bk   2023年11月24日   43   0   0 TCPHTTP首部
  pfb3gDAOHucg   2023年12月09日   19   0   0 TCP网络层协议UDP
  eHipUjOuzYYH   2023年12月06日   13   0   0 nginxHTTP
  mjtHZIki74si   2023年12月06日   14   0   0 TCP重传
  38gcbVXUBcLA   2023年11月25日   16   0   0 服务器客户端HTTP