迁移至Fastify后ECS Fargate健康检查持续失败该如何解决?
问题排查方案
- 确认Fastify监听地址
Fastify默认仅绑定本地回环地址127.0.0.1,和Express默认绑定0.0.0.0的行为不同,这会导致容器外部的健康检查请求无法访问到服务。启动服务时需要显式指定监听地址为0.0.0.0:await server.listen({ port: 3000, host: '0.0.0.0' }) - 核对网络访问规则
你提到容器日志中完全没有健康检查请求记录,大概率是网络层面请求被拦截:- 检查Fargate服务关联的安全组入站规则,是否允许负载均衡所在的CIDR或者安全组访问3000端口
- 确认VPC的网络访问控制列表(NACL)没有拦截对应端口的入站流量
- 调整健康检查宽限期
SSR服务启动阶段通常需要预加载模板、资源等内容,若健康检查没有配置启动宽限期,服务还未完成启动就会被判定不健康终止。可以在CloudFormation中增加HealthCheckGracePeriodSeconds配置,根据服务启动时长设置为30~120秒不等。 - 优化HEAD请求处理逻辑
如你补充的版本说明,Fastify 3.10.x及以上版本可以直接开启自动HEAD路由支持,无需单独定义server.head规则,避免自定义逻辑可能带来的异常:const fastify = require('fastify')({ exposeHeadRoutes: true }) - 容器内本地验证
临时关闭服务的健康检查配置,启动容器后进入容器内部执行curl -I http://127.0.0.1:3000/categories,确认服务本身在容器环境下可以正常响应请求,排除打包、镜像构建阶段的配置错误。
内容的提问来源于stack exchange,提问作者Igor Shmukler
相关产品推荐
相关产品推荐

