2011-04-27 113 views
0

我使用nginx作为反向代理,并在上游服务器(Windows 2003)中找到超过30k个TIME_WAIT状态端口。我知道我的服务器在这里讨论(http://nginx.org/pipermail/nginx/2009-April/011255.html)的“端口之外”,并且设置nginx和上游服务器重用TIME_WAIT并更快地回收。nginx上游服务器“端口外”

[sysctl -p] 
…… 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1 

但是nginx的挂起和“连接超时而连接到上游服务器”仍然错误可以在nginx的错误日志中找到,当上游的RPS高于10001分钟内。当上游是Windows时,服务器将在几秒钟内“脱离端口”。

任何想法?有一个等待队列的连接池? Maxim Dounin写了一个有用的模块来保持与memcached的连接,但为什么它不能支持Web Server?

+0

也许这是为http://serverfault.com? – Matthew 2011-04-27 02:06:41

回答

0

我是nginx新手,但从目前为止我所知道的,您需要减少net.ipv4.tcp_fin_timeout值,默认值为60秒。开箱即用nginx不支持与后端的http连接池。正因为如此,每个后端请求都会创建一个新的连接。使用64K端口和60秒等待该端口可以重新使用之前,平均RPS不会超过每秒1K。你可以在nginx服务器和后端服务器上减少你的net.ipv4.tcp_fin_timeout值,或者你可以为后端分配多个ip地址,并配置nginx把这些“相同的服务器”当作不同的服务器。