我对我的应用程序进行了docker化。如果我用docker run来运行它,那么一切都很好。 我尝试使用ecs fargate运行它,并在其前面放置ALB。 如果我尝试通过ALB dns访问我的应用程序,则会收到504 Gateway Teme-out。
在寻找解决方案时,我发现了一条帖子,告诉我将Tomcat超时设置为高于ELB超时,但这没有帮助。
FROM tomcat:8.0.20-jre8
RUN sed -i 's/connectionTimeout="20000"/connectionTimeout="70000"/' /usr/local/tomcat/conf/server.xml
CMD ["catalina.sh","run"]
COPY /target/Webshop.war /usr/local/tomcat/webapps/
http 2019-09-11T11:20:50.585293Z app/Doces-Backe-19RQJLVNHYG2P/8fb4f4079bb6ff9f 66.85.6.136:47767 - -1 -1 -1 503 - 18 348 "GET http://:8080/ HTTP/1.0" "-" - - arn:aws:elasticloadbalancing:eu-central-1:573575081005:targetgroup/ecs-Docest-de-webshop/8df4f0978484f8bd "Root=1-5d78d892-58886d3490906f0fa3914563" "-" "-" 0 2019-09-11T11:20:50.462000Z "forward" "-" "-"
http 2019-09-11T11:23:23.535869Z app/Doces-Backe-19RQJLVNHYG2P/8fb4f4079bb6ff9f 66.85.6.136:50950 10.10.11.140:8080 -1 -1 -1 504 - 18 303 "GET http://:8080/ HTTP/1.0" "-" - - arn:aws:elasticloadbalancing:eu-central-1:573575081005:targetgroup/ecs-Docest-de-webshop/8df4f0978484f8bd "Root=1-5d78d921-a236121716bd1bd209625fd8" "-" "-" 0 2019-09-11T11:23:13.415000Z "forward" "-" "-"
http 2019-09-11T11:23:56.286426Z app/Doces-Backe-19RQJLVNHYG2P/8fb4f4079bb6ff9f 66.85.6.136:51658 10.10.11.140:8080 -1 -1 -1 504 - 18 303 "GET http://:8080/ HTTP/1.0" "-" - - arn:aws:elasticloadbalancing:eu-central-1:573575081005:targetgroup/ecs-Docest-de-webshop/8df4f0978484f8bd "Root=1-5d78d942-22a1680464884762e02ec940" "-" "-" 0 2019-09-11T11:23:46.156000Z "forward" "-" "-"
http 2019-09-11T11:23:27.513803Z app/Doces-Backe-19RQJLVNHYG2P/8fb4f4079bb6ff9f 66.85.6.136:51034 10.10.11.140:8080 -1 -1 -1 504 - 18 303 "GET http://:8080/ HTTP/1.0" "-" - - arn:aws:elasticloadbalancing:eu-central-1:573575081005:targetgroup/ecs-Docest-de-webshop/8df4f0978484f8bd "Root=1-5d78d925-b6b5daf0d0f733140aea0f84" "-" "-" 0 2019-09-11T11:23:17.393000Z "forward" "-" "-"
我希望看到我的应用程序在elb上运行。
感谢您的帮助!
答案 0 :(得分:1)
gateway timeout
背后可能有多种原因。我对Fargate唯一不满意的是debug-log
。 @AWS小组应默认启用Fargate服务的日志配置,因为它很难调试没有日志的问题。
更好地配置日志驱动程序并将日志推送到Cloud Watch并查看实际问题,还要仔细检查任务定义中所需的端口和服务中的映射端口。
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "awslogs-spring",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "awslogs-example"
}
或通过AWS控制台
您需要为任务定义或服务分配Cloud Watch日志的权限或角色,以将日志推送到Cloud Watch。
一旦配置了日志,然后转到cloudwatch loggroup并搜索日志组,以便深入了解您的应用程序。
但是,仍然要首先解决实际问题,您必须了解错误代码和Gateway Timeout
的可能原因。
HTTP 504:网关超时
描述:指示负载平衡器由于在空闲超时时间内未完成请求而关闭了连接。
原因1:与配置的空闲超时相比,应用程序需要更长的响应时间。
解决方案1:监视HTTPCode_ELB_5XX和Latency指标。如果有 这些指标有所增加,可能是由于应用程序 在空闲超时时间内没有响应。有关的详细信息 超时的请求,在负载均衡器上启用访问日志 并查看由生成的日志中的504个响应代码 弹性负载平衡。如有必要,可以增加容量 或增加配置的空闲超时时间,以便进行长时间的操作 (例如上传大文件)即可完成。了解更多信息, 请参阅为经典负载配置空闲连接超时 平衡器以及如何解决弹性负载平衡过高的问题 延迟。
原因2:已注册的实例关闭与Elastic Load Balancing的连接。
解决方案2:在EC2实例上启用保持活动设置并进行 确保保持活动超时大于空闲超时 负载均衡器的设置。
答案 1 :(得分:0)
解决方案:
问题是我在负载均衡器的安全组中设置了正确的端口,但没有在ECS服务的安全组中设置了正确的端口。 所以我在那里打开了所需的端口,现在它可以工作了。
过程:
谢谢!