我正在重复我在https://forums.aws.amazon.com/thread.jspa?threadID=275855&tstart=0发布的问题 接触更多人。
您好,
我正在尝试在AWS中部署REST服务。目前的架构是: 域名(Route 53) - >负载均衡器 - >单个EC2实例(绑定到弹性IP)。我使用证书管理员颁发的TLS / SSL证书。
该实例是Ubuntu 16.04机器,该服务是用(裸)Vert.X(==无代理服务器)实现的。
然而,504错误(网关超时)发生在一系列的几个不同的请求(每个请求<1s)之后,然后它没有响应。几次请求后,请求不会到达服务器实例。当我直接访问域名和负载均衡器时,我检查它是否以相同的方式发生。我已经确认完全相同的方案是使用直接URL。
我运行了一个虚拟服务器返回“hello world”,它与负载均衡器一起工作正常。问题应该是由负载均衡器和服务器代码之间没有连贯性引起的,但我无法从哪里开始。
我检查了几个抱怨504错误的线程,并按照一些说明进行操作,但它们不起作用。特别是我在Vert.x中设置了keep-alive选项,并将空闲时间设置得比平衡器长。由于延迟不超过直接通信的时间,我相信这不是问题。我也检查了安全组,并确认正确的端口已打开。 (前几个请求正在运行,因此也不一定是问题。)
你们有没有意识到我应该从哪里开始看?更好的是,知道问题的根源吗?
提前致谢。
编辑:我刚刚在一些代码中发现了这个问题。我在下面回答了自己。谢谢你的阅读!答案 0 :(得分:1)
在我的代码中发现了这个问题。一些API(由我的同事实现......)没有在服务器中刷新HTTP响应的缓冲区。
在Vert.X Java中,它是resp.end()
。
它以某种方式使用直接访问可能缓冲区在某些时候被刷新,但是冲洗似乎没有被负载均衡器捕获。
希望没有人会遇到这种情况,但万一......