远程桌面服务网关背后的 AWS ALB 连接问题

远程桌面服务网关背后的 AWS ALB 连接问题

我已经在 AWS ALB 后面设置了远程桌面服务网关。

AWS ALB 执行 SSL 卸载并通过 HTTP(端口 80)与 RDS 网关服务器通信。

配置有效,我可以通过 RDP 连接到 RDS 网关后面的实例,但很多时候(平均每 15-20 分钟)RDP 会话需要花费几秒钟(5-10)重新连接。

ALB 是否存在长达几分钟的超长连接问题?频繁重新连接的潜在根本原因是什么?

**更新更多详细信息**

ALB 的空闲超时设置为 4000 秒。

该设置对于 Windows RD 客户端来说似乎运行良好(在这种情况下无需重新连接)。

然而在 Catalina 10.15.3 上运行 Microsoft RD for Mac 客户端 10.3.9 (1767) 时,我们会遇到频繁重新连接(每隔 5 到 20 分钟)和偶尔的冻结。

重新连接时,/var/log/systemd.log 上的 Microsoft RD for Mac 客户端日志未报告任何特殊内容。

RDS 网关机器上的 IIS 日志也没有报告任何特殊内容(它似乎没有记录 RDG_IN_DATA 和 RDG_OUT_DATA)。它只记录 ELB 状态检查和偶尔对 ALB 的恶意访问。

发送到 S3 的 AWS ALB 日志确实报告了重新连接时出现的一系列 RDG_OUT_DATA 和 RDG_IN_DATA。第一个是带有 200 状态代码和大量接收字节数的 RDG_OUT_DATA,随后是两个带有 401 状态代码的 RDG_OUT_DATA,然后是两个带有 401 状态代码的 RDG_IN_DATA,最后是带有 200 状态代码的 RDG_IN_DATA,直到下一次重新连接发生。

如果 Mac 客户端直接针对 RDS 网关使用,中间没有 AWS,那么它可以正常工作(每 5 到 20 分钟不会重新连接/冻结)。

答案1

对于客户端通过负载均衡器发出的每个请求,负载均衡器都会维护两个连接。前端连接位于客户端和负载均衡器之间,后端连接位于负载均衡器和目标之间。负载均衡器管理空闲超时,当在指定时间段内未通过前端连接发送任何数据时,将触发该超时。如果在空闲超时期限结束时尚未发送或接收任何数据,则负载均衡器将关闭连接。

默认情况下,Elastic Load Balancing 将空闲超时值设置为 60 秒。因此,如果目标在请求进行期间没有至少每 60 秒发送一些数据,则负载均衡器可以关闭前端连接。为确保文件上传等耗时操作有时间完成,请在每个空闲超时期限结束之前发送至少 1 个字节的数据,并根据需要增加空闲超时期限的长度。

对于后端连接,我们建议您为 EC2 实例启用 HTTP 保持连接选项。您可以在 EC2 实例的 Web 服务器设置中启用 HTTP 保持连接。如果启用 HTTP 保持连接,则负载均衡器可以重复使用后端连接,直到保持连接超时到期。我们还建议您将应用程序的空闲超时配置为大于为负载均衡器配置的空闲超时。

有关详细信息,请参阅本文应用程序负载均衡器

相关内容