nginx后端应用服务器有大量的tcp连接处于time_wait

今天发现weblogic上有大量的连接处于time_wait状态,感觉很奇怪。据说是nginx照成的,用tcpdump研究下。
在nginx的服务器上执行
tcpdump -i bond0 -nnA src host 134.96.129.36 and dst host 134.96.129.71 | grep -30 134.96.111.86
nginx后端应用服务器有大量的tcp连接处于time_wait_第1张图片
可以看到nginx在把请求转发到后台weblogic上时候是发送的http头信息中指定使用HTTP/1.0和Connection:close。从这个Connection属性可以知道,nginx让后端weblogic在请求完成后(及响应请求后),直接关闭连接。及weblogic做的主动关闭,所以主动关闭的一方会有大量的time_wait。----http短连接
在浏览器访问,看以看到只要weblogic请求完毕就关闭与nginx的连接,然后进入time_wait状态,time_wait的时间是60秒。
nginx后端应用服务器有大量的tcp连接处于time_wait_第2张图片
请求转码
json={"param":null,"target":"Version"}
-------------------------------------------------------------------------------------------
在nginx的配置中有一个属性指定浏览器发起的连接与nginx保持keepalive的时间 -----http长连接
下面验证该配置是否有用
nginx后端应用服务器有大量的tcp连接处于time_wait_第3张图片
设置keepalive_timeout属性为30秒
在nginx服务器上重复执行如下命令,监听来自ip为85的浏览器请求
netstat -nto | grep 134.96.111.85 | grep 8010 >> abc.txt && date >> abc.txt
此时在浏览器发送请求该
第一次浏览器求情的时间是19:41:48
nginx后端应用服务器有大量的tcp连接处于time_wait_第4张图片
断开连接的时间是19:42:17
nginx后端应用服务器有大量的tcp连接处于time_wait_第5张图片
established的时间是12+17=29秒。其实第一浏览器的请求时间应该往前的。我统计的不准,执行netstat时候晚了,所以刚好实际那应该就是30秒。
---------------------------------------------------------------------------------------------
还可以做下测试,只要在浏览器重复请求web页面,可以发现浏览器与nginx的连接会被重用,这个可以通过
established连接持续的时间可以看出来。---------------这就是所谓的http长连接了

你可能感兴趣的:(C/C++,架构,网络编程)