配置有上游的Nginx发送FIN

时间:2013-09-17 05:03:51

标签: java sockets tomcat tcp nginx

我让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保持连接打开。

我很可能会误解这是如何运作的,我所看到的行为实际上是可取的,在这种情况下,我会欣赏一些启示。

0 个答案:

没有答案