0
点赞
收藏
分享

微信扫一扫

nginx 长连接

花明 2023-11-21 阅读 43
一、短连接 与 长连接
      • 短连接
      当客户端通过浏览器访问 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;               # 启用长连接支持
              ...
          }
      }
举报

相关推荐

0 条评论