我让Nginx使用APR连接器面对Tomcat 6.0服务器。
我已将Nginx配置为通过HTTP / 1.1与Tomcat通信:
http {
...
upstream tomcat {
server 127.0.0.1:8080;
keepalive 16;
}
server {
....
location ... {
proxy_pass http://tomcat;
proxy_http_version 1.1;
proxy_set_header Connection "Keep-Alive";
...
}
}
}
Tomcat设置为connectionTimeout为60s,keepAliveTimeout为60s,maxKeepAliveRequests设置为“-1”(无限制)。
我一直在跟踪Nginx和Tomcat之间的TIME_WAIT状态的套接字,并注意到一旦在中到重负载下有500-600个已建立的连接,就会有相同数量的TIME_WAIT套接字。
我使用tcpdump收集了一个转储并使用Wireshark对其进行了分析,并注意到始终通过发送FIN到127.0.0.1:8080来启动TCP连接终止的Nginx。具体而言,如果在Tomcat中运行的Web服务需要大约8-10秒的响应时间,则会发生这种情况。 Nginx从Tomcat获取HTTP / 1.1 200 OK响应,然后等待几秒钟并将FIN / ACK发送给Tomcat。
有没有办法保持连接打开?将keepalive设置增加到一个很大的数字(例如256)会消除TIME_WAIT套接字,但我宁愿保持这个值低并让Nginx保持连接打开。
我很可能会误解这是如何运作的,我所看到的行为实际上是可取的,在这种情况下,我会欣赏一些启示。