Nginx反向代理与后端服务采用连接池参数分析,长连接减少TIME_WAIT

前面已经讲过,在使用locust直连后端服务器时,可以通过设置HTTP头部为keep-alive,并在客户端断开连接,减少服务器的连接压力。因为由客户端断开连接,客户端的连接会变为TIME_WAIT状态,从而有效的节省了服务器的资源。

但通常,我们的服务器并不是简单的一个服务器端程序,一般还会有cache服务器,反向代理服务器,负载均衡服务器等等很多的中间部分,而这些模块之间都是通过新的连接相连,如果频繁的新建断开他们之间的连接,不仅会导致服务器端出现大量TIME_WAIT连接,还会导致性能的下降(如果中间每多过一层就多新建一条连接,那么性能肯定会急剧下降,新建一条连接的代价是相当高的)。

举一个常见的模型

客户端------>nginx反向代理服务器------>后端服务器

客户端使用短连接频繁的请求反向代理服务器,如果反向代理服务器也同样去请求后端服务器的话,当客户端断开连接,nginx也断开与后端服务器的连接,就会造成nginx所在的服务器产生大量的TIME_WAIT连接,压力增大时很可能导致nginx服务器无法提供新的连接。

面对上面的问题,就需要调整nginx的参数。保证不论客户端如何请求nginx服务器,nginx与后端服务器都保持一定数据量的长连接,这样就能有效的避免连接的频繁创建于释放。

在upstream XXX 配置中增加keepalive配置

这意味着,nginx服务器会与后端服务器最多“保持”5000条连接的连接池,“保持”的意思是,当客户端的请求非常多时,nginx与后端服务器会存在多余5000的连接,但是当压力减小时,多于5000的连接会被释放,仍然恢复到5000条连接。也就是说,如果这个值设置的非常小,当客户端访问压力剧增时,仍然是会出现大量新建释放连接的问题的,当然,也可以通过增加连接池内连接的超时时间来控制连接的有效期,不过这就需要根据业务需求反复测试调整了。

要想keepalive生效,还需要两个必要的条件:

1、需要强制nginx与后端服务器使用1.1版本的HTTP协议,因为1.1默认是keepalive的。

2、需要将客户端请求的Connection头部重置掉,因为如果客户端传来的是close,那么这条请求到了后端服务器那,后端服务器就会主动将连接关闭掉,nginx与服务器端的连接也就无法keepalive了。

经过这样的调整,就能实现我们nginx与后端服务器之间使用长连接的连接池,最大限度的复用连接。

原文地址:https://www.cnblogs.com/satuer/p/9657730.html

时间: 2024-10-17 07:14:15

Nginx反向代理与后端服务采用连接池参数分析,长连接减少TIME_WAIT的相关文章

利用nginx反向代理,后端Web如何获取真实客户ip

利用nginx反向代理,后端Web如何获取真实客户端ip 一.nginx反向代理nginx,后端的nginx该如何配置才能获取到客户端的真实IP地址呢. 1.首先需要在nginx代理服务器上的配置文件nginx.conf上的 location 中添加一行参数: proxy_set_header  X-Real-IP  $remote_addr; 重启nginx服务 2.对后面的nginx进行配置 vim /usr/local/nginx/conf/nginx.conf 加入下面参数: set_r

nginx反向代理到后端tomcat,并将IP地址发送到后端的配置

nginx反向代理到后端,并将IP地址发送到后端的tomcat上. 假设我们的网站叫demo.demo.com 前端Nginx配置如下: /usr/local/nginx/conf/nginx.conf 在http段加上下面4行:     proxy_set_header X-Forwarded-For $remote_addr;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_set_head

keepalived+nginx反向代理访问后端web服务器

 架设web服务器通过nginx反向代理访问,并通过keepalived配置nginx反向代理服务器和nginxweb 服务器的故障转移 1.系统:Centos6.6 2.反向代理:Keepalived+nginxproxy:  主机:PHP-API-P1       IP地址:192.168.0.111 主机:PHP-API-P2 IP地址:192.168.0.112 VIP :192.168.0.8 3.后端服务:Keepalived+nginx: 主机:PHP-API-S1 IP地址:19

nginx反向代理前后端分离项目(后端多台)

目前软件架构都比较流行前后端分离,前后端的分离也实现了前后端架构的分离,带来的好处 —— 整个项目的开发权重往前移,实现真正的前后端解耦,动态资源和静态资源分离,提高了性能和扩展性. 通常SpringBoot与vue 进行前后端分离,主要有两种方式: 1.打包(npm run build命令)vue项目出来的dist文件夹拷贝到springboot项目的static文件目录,部署到tomcat即可. 2.利用nginx的反向代理. 本文主要讲解第二种 首先打包前端项目到指定目录:E:\fjgh\

【Linux】采用nginx反向代理让websocket 支持 wss

背景:玩swoole 服务 使用Nginx反向代理解决wss问题. 即客户端通过wss协议连接 Nginx 然后 Nginx 通过ws协议和server通讯. 也就是说Nginx负责通讯加解密,Nginx到server是明文的,swoole 服务不用开启ssl,而且还能隐藏服务器端口和负载均衡(何乐不为). server { # 下面这个部分和你https的配置没有什么区别,如果你是 宝塔 或者是 oneinstack 这里用生成的也是没有任何问题的 listen 443; server_nam

Web服务之Nginx反向代理与负载均衡

一.代理 正向代理: 正向代理是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标服务器,然后代理向目标服务器转交请求并将获得的内容返回给客户端.客户端必须要进行一些特别的设置才能使用正向代理. 作用: 访问无法访问的服务器(翻墙,懂得) 加速访问目标服务器(链路加速) Cache缓存(访问加速) 实现客户端访问授权 隐藏访问者 反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转

nginx反向代理-后端服务器组设置

nginx服务器的反向代理时其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多.下面会尽量详细地介绍对应的指令,及其使用状态. 反向代理一般是互联网需要向内网拉取资源,比如访问一个web网站时,互联网应用通过一个代理服务器到后面真实的web服务器拉取应用所需的数据. nginx服务器反向代理用到的指令如果没有特别的说明,原则上可以出现在nginx配置文件的http块,server块和location块中,但是同正向代理一样,一般是搭建在nginx服务器中单独配置一个server

nginx服务,nginx反向代理

(一)nginx 同apapche功能一样,基于http协议传输,提供web服务,用于搭建linux的web服务器. 1.安装过程: (1)安装扩展源epel,有的话可不用安装: -----yum clean all -----yum install epel-release -y (2)安装nginx ----yum install nginx -y (3)写配置文件(写的配置以分号结尾) -----vim /etc/nginx/nginx.conf 默认关键配置项: root  /usr/s

Nginx反向代理后端多个Tomcat、Nginx+PHP服务器(Nginx的代理和负载功能)

需求分析: 现有3个二级域名,一个IP地址,要实现将这3个域名通过1个IP地址对外提供web服务,可使用IP+端口的方式对域名进行解析,且互不影响.如: Domain1:www.huangming.org     IPADDR:192.168.1.33:80 Domain2:web1.huangming.org    IPADDR:192.168.1.33:8080 Domain3:web2.huangming.org    IPADDR:192.168.1.33:8080 其中Domain1作