Keep alive timeout not being respected on Amazon ELB

amazon ec2amazon-web-services

I'm using Tomcat 6.0.24 on Ubuntu (JDK 1.6) with an app that does Comet-style requests on an HTTPS connector (directly against Tomcat, not using APR).

I'd like to set the keep-alive to 5 minutes so I don't have to refresh my long-polling connections. Here is my config:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="1000"  keepAliveTimeout="330000"
        scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />

Unfortunately it seems that the server closes the connection after 65 seconds. The pcap from a sample session goes something like this:

T=0   Client sends SYN to server, handshake etc.
T=65  Server sends FIN to client
T=307 Client sends FIN to server

(I'm guessing the 5 minute timeout on the client is due to the HTTP lib not detecting the socket close on the server end, but in any case — the server shouldn't be closing the connection that early)

(edit: this works as expected when using the standard HTTP connector)

Best Answer

Amazon's ELB (Elastic Load Balancer) has an undocumented (except on forums) 60-second timeout which will tear down the connection if no data was sent. Hacking around by sending whitespace every 55 seconds seems like it'll work until they make this configurable.

Related Topic