我在 Ubuntu(JDK 1.6)上使用 Tomcat 6.0.24,其中一个应用程序在 HTTPS 连接器上执行 Comet 样式请求(直接针对 Tomcat,不使用 APR)。
我想将保持连接时间设置为 5 分钟,这样我就不必刷新长轮询连接。这是我的配置:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="1000" keepAliveTimeout="330000"
scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
不幸的是,服务器似乎在 65 秒后关闭了连接。示例会话中的 pcap 如下所示:
T=0 Client sends SYN to server, handshake etc.
T=65 Server sends FIN to client
T=307 Client sends FIN to server
(我猜测客户端的 5 分钟超时是由于 HTTP 库未检测到服务器端的套接字关闭,但无论如何 - 服务器不应该那么早关闭连接)
(编辑:使用标准 HTTP 连接器时,它可以按预期工作)
答案1
亚马逊的 ELB(弹性负载均衡器)有一个未记录的(除了论坛) 60 秒超时,如果没有发送数据,连接就会断开。每 55 秒发送一次空格似乎可行,直到他们将其配置为可配置。
答案2
负载均衡器超时(关闭连接)现在记录:
配置负载均衡器的空闲超时设置
- 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/。
- 在导航窗格中,在负载均衡, 点击负载均衡器。
- 选择您的负载均衡器。
- 在底部窗格中,选择描述标签。
- 寻找连接设置,然后点击(编辑)。
- 在里面配置连接设置对话框中,输入一个值空闲超时. 空闲超时范围是 1 至 3,600 秒。
- 点击节省。
答案3
答案4
有人可以从 AWS 文档中澄清这一说法吗? https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html
You can enable keep-alive in the web server settings for your instances. Keep-alive, when enabled, enables the load balancer to reuse back-end connections until the
保持活动超时expires. To ensure that the load balancer is responsible for closing the connections to your instance, make sure that the value you set for the HTTP
保持活动时间is greater than the idle timeout setting configured for your load balancer.
根据 Nginx 文档保持活动超时和保持活动时间两者是不同的属性。 https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time
如果按照示例进行配置的话,将会非常有帮助。
Configuration from Nginx:
keepalive ??;
keepalive_time ??;
keepalive_timeout ??;
Configuration from ELB:
Idle timeout: ??