php nginx 长连接,Nginx长连接

讨论关于nginx的长连接和TIME-WAIT相关知识点

长连接

Nginx从 1.1.4 开始,实现了对后端机器的长连接支持,这意味着 Nginx 与后端机器的通信效率更高,后端机器的负担更低。

示例:

upstream http_backend {

keepalive 16;

server 127.0.0.1:8080;

}

server {

location /http/ {

proxy_pass http://http_backend;

proxy_http_version 1.1; #设置http版本为1.1

proxy_set_header Connection ""; #设置http头默认为长连接,不关闭

}

}

默认使用http1.0,并且connection连接默认是close

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

原理:

默认情况下 Nginx访问后端都是用的短连接HTTP1.0,一个请求来了,Nginx新开一个端口和后端建立连接,请求结束连接回收。如果像上面的配置一样设置了长连接,Nginx 会接受客户端的请求,处理完成之后Nginx会继续保持和后端的长连接

如果并发请求超过了 keepalive 指定的最大连接数,Nginx 会启动新的连接 来转发请求,新连接在请求完毕后关闭,而且新建立的连接是长连接

keepalived

keepalive 指定的 数值 是 Nginx 每个 worker 连接后端的最大长连接数,而不是整个 Nginx 的。 而且这里的后端指的是所有的后端,而不是每一个后端。

TIME_WAIT

出现大量TIME_WAIT 状态的连接,使用以下命令验证之:

netstat -n | grep TIME_WAIT

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

从以下原理图中可以看出,发起tcp四次挥手的一方将会进入TIME_WAIT状态,而TIME_WAITE的等待时间默认是2MSL,MSL默认是2min。

a1aa93b55f7a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

nginx服务器出现大量TIME_WAIT,可能情况是keepalive设置的值太小,

原理:

Nginx 和后端的长连接不够用时 Nginx 会新建连接来处理新的请求,而我们的配置已经配置死了 HTTP1.1,建立连接后,后端认为是长连接而不会主动关闭连接一般有个空闲超时,关闭连接由 Nginx 来做了,所以 Nginx 会出现大量的 TIME_WAIT。

默认情况下,Nginx 用 HTTP1.0 请求后端,后端处理完成后就主动关闭连接,所以 TIME_WAIT 在后端。

如果开启了长连接,而长连接又大量不够用,此时 Nginx 存在的 TIME_WAIT 可能会大量占用端口,导致端口用尽,如果用尽,后果很严重

小网站在被CC攻击时的连接数情况

a1aa93b55f7a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值