我正在使用nginx作为反向代理,并在上游服务器(Windows 2003)中找到超过30k个TIME_WAIT状态端口。我知道我的服务器是“out of ports”,在这里讨论(http://nginx.org/pipermail/nginx/2009-April/011255.html),并设置nginx和上游服务器以重用TIME_WAIT并更快地回收。
[sysctl -p]
……
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
但是当上游的RPS在1分钟内高于1000时,nginx挂起并且“连接到上游服务器时连接超时”错误仍然可以在nginx错误日志中找到。当上游是Windows时,服务器将在几秒钟内“超出端口”。
有什么想法吗?具有等待队列的连接池? Maxim Dounin编写了一个有用的模块来保持与memcached的连接,但为什么它不能支持Web Server?
答案 0 :(得分:0)
我是nginx的新手,但据我所知,到目前为止,您需要减少net.ipv4.tcp_fin_timeout值,默认为60秒。开箱即用的nginx不支持与后端的http连接池。因此,每个后端请求都会创建一个新连接。使用64K端口和60秒等待端口可以重复使用,平均RPS不会超过每秒1K。你可以减少 您在nginx服务器和后端服务器上的net.ipv4.tcp_fin_timeout值,或者您可以为后端框分配多个IP地址,并配置nginx将这些“相同服务器”视为不同的服务器。