You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Elastic Beanstalk中使用Traefik生成SSL证书报错求助

AWS Elastic Beanstalk + Traefik 环境健康异常排查与修复

排查步骤按优先级排序

1. 确认EC2安全组端口配置

  • 登录AWS控制台,找到Beanstalk环境对应的EC2实例,查看绑定的安全组
  • 入站规则必须包含:
    • HTTP(80端口):允许所有来源(0.0.0.0/0)或Beanstalk健康检查IP段
    • HTTPS(443端口):允许所有来源(0.0.0.0/0)
    • (调试用)8080端口:仅允许你的公网IP访问(方便查看Traefik Dashboard)

2. 修正Elastic Beanstalk健康检查规则

Beanstalk默认的健康检查会访问实例的80端口根路径,但现在Traefik接管了80端口,需要确保健康检查能正确触达后端服务:

  • 进入Beanstalk控制台,打开环境的配置 > 实例(单实例环境)或负载均衡器(负载均衡环境)
  • 调整健康检查的路径为你的后端服务健康校验端点(比如/health),端口保持80
  • 保存配置后等待环境更新,观察健康状态是否恢复

3. 查看容器日志定位错误

Beanstalk提供了日志收集功能,直接拉取日志分析:

  • 在Beanstalk控制台,进入日志 > 请求日志,选择"下载完整日志"或"实时查看"
  • 重点排查:
    • Traefik日志:检查是否有ACME证书生成失败(如挑战请求未到达、端口被拦截)、Docker socket访问权限问题
    • Backend日志:确认服务是否正常启动、端口是否监听8080
    • 文件权限:acme.json需要Traefik拥有读写权限,若权限不足,可在.platform/hooks/prebuild目录添加脚本设置权限:
      #!/bin/bash
      mkdir -p letsencrypt
      chmod 600 letsencrypt/acme.json || true
      

4. 优化Docker Compose配置适配Beanstalk

你的现有配置存在几个Beanstalk环境下的问题,调整如下:

  • 持久化存储:Beanstalk的临时存储会在部署后重置,./letsencrypt卷会丢失acme.json,建议绑定EFS目录(需先在Beanstalk配置中关联EFS)
  • 健康检查:给Traefik和Backend添加健康检查标签,确保Beanstalk能识别服务状态
  • API安全:生产环境关闭--api.insecure=true,避免暴露Traefik Dashboard

调整后的配置示例:

version: "3.8"
services:
  backend:
    image: "mypersonalrepo/image:tag"
    restart: "always"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.backend.rule=Host(`my.53.route.net`)"
      - "traefik.http.routers.backend.entrypoints=websecure"
      - "traefik.http.routers.backend.tls.certresolver=myresolver"
      - "traefik.http.services.backend.loadbalancer.server.port=8080"
      - "traefik.http.services.backend.loadbalancer.healthcheck.path=/health"
      - "traefik.http.services.backend.loadbalancer.healthcheck.interval=10s"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  traefik:
    image: "traefik:v2.9"
    container_name: "traefik"
    command:
      - "--log.level=INFO"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myresolver.acme.email=myemail@gmail.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/efs/letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    healthcheck:
      test: ["CMD", "traefik", "healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 3

5. 验证ACME挑战可用性

Let's Encrypt的HTTP挑战需要公网能访问http://your-domain/.well-known/acme-challenge/路径:

  • 用curl测试:curl http://my.53.route.net/.well-known/acme-challenge/test
  • 如果返回404以外的错误(如连接超时),说明80端口流量未到达Traefik,重新检查安全组和Beanstalk的端口转发规则

内容的提问来源于stack exchange,提问作者Nuno Aparício

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:35:13