Elastic Beanstalk EC2实例上的Nginx代理超时

时间:2015-03-01 22:24:01

标签: amazon-web-services nginx amazon-ec2 timeout docker

我已经在Elastic Beanstalk上启动并运行了一个Docker应用程序,并且注意到它偶尔会超时并将504 Gateway Timeout返回给来自Internet的请求。为了调试这个,我创建了一个脚本,我正在我的本地机器上运行,它不断向我的应用程序发送完全相同的请求,并告诉我它是否收到了除200响应之外的任何内容。这是输出的摘录:

[21:38:14] Success
[21:38:15] Success
[21:38:15] Success
[21:39:15] Non 200 code: 504
[21:40:15] Non 200 code: 504
[21:41:15] Non 200 code: 504
[21:42:15] Non 200 code: 504
[21:43:15] Non 200 code: 504
[21:44:15] Success
[21:44:15] Success
[21:44:16] Success

我想知道504请求是否甚至命中了我的EC2实例,所以我检查了它的nginx日志:

172.31.8.21 - [01/Mar/2015:21:38:15 +0000] "GET /v1/jobs HTTP/1.1" 200 5
172.31.8.21 - [01/Mar/2015:21:38:15 +0000] "GET /v1/jobs HTTP/1.1" 200 5
172.31.8.21 - [01/Mar/2015:21:38:15 +0000] "GET /v1/jobs HTTP/1.1" 200 5
172.31.23.11 - [01/Mar/2015:21:39:15 +0000] "GET /v1/jobs HTTP/1.1" 400 0
172.31.23.11 - [01/Mar/2015:21:40:15 +0000] "GET /v1/jobs HTTP/1.1" 400 0
172.31.23.11 - [01/Mar/2015:21:41:15 +0000] "GET /v1/jobs HTTP/1.1" 400 0
172.31.23.11 - [01/Mar/2015:21:42:15 +0000] "GET /v1/jobs HTTP/1.1" 400 0
172.31.23.11 - [01/Mar/2015:21:43:15 +0000] "GET /v1/jobs HTTP/1.1" 400 0

综观日志,似乎负载平衡器发送到我的EC2实例,它然后超时60秒后这使得负载平衡器返回504,并纪录400到我的nginx的请求日志。真正奇怪的是504请求的IP地址与其他每个成功请求的IP地址不同。

据我了解,这是在Docker Elastic Beanstalk应用程序中处理请求的拓扑结构:

request -> load balancer -> load balancer proxy -> EC2 instance -> EC2 instance proxy -> Docker image

所以我检查了Docker镜像中的nginx日志,并且在负载均衡器返回access.log时的时间段内没有504个条目。

这意味着由于某种原因,请求将转到EC2实例代理,然后超时。有没有人遇到过这个问题,知道为什么吗?我还想知道为什么只有在172.31.23.11 IP地址是请求的地址时才会发生超时。

值得注意的是,当超时发生时,我的EC2实例上的nginx在其error.log中没有报告任何内容。

0 个答案:

没有答案