使用Traefik配置HTTPS遇404错误求助
问题分析与修复方案
核心问题排查
你的配置存在几个关键问题,导致Traefik无法正确路由请求并生成HTTPS证书:
1. 未指定View服务的容器内部端口
Traefik需要明确知道将请求转发到容器的哪个端口,当前View服务的标签缺少端口映射配置,导致Traefik无法识别目标端口,进而返回404。
修复操作:
在View服务的labels中添加端口指定(替换为你的容器实际监听端口,若容器内部用80则写80):
labels: - "traefik.enable=true" - "traefik.http.routers.view.rule=Host(`foo.com`)" - "traefik.http.routers.view.entrypoints=websecure" - "traefik.http.routers.view.tls=true" - "traefik.http.routers.view.tls.certresolver=myresolver" # 新增:指定容器内部服务端口 - "traefik.http.services.view.loadbalancer.server.port=80"
2. acme.json文件权限错误
Traefik要求存储证书的acme.json文件权限必须为600,否则无法写入证书内容,导致HTTPS无法生效。
修复操作:
在主机终端执行命令修改文件权限:
chmod 600 ./acme.json
3. 端口冲突隐患
你的Reverse-proxy服务将主机8080端口映射到Traefik的Dashboard端口,而View服务也暴露了8080端口(容器内),虽不会直接导致404,但容易造成混淆。建议调整Traefik Dashboard的访问方式:
可选优化:
在traefik.yml中启用Dashboard并通过域名访问:
api: dashboard: true
同时给Reverse-proxy服务添加Dashboard路由标签:
reverse-proxy: # 其他配置不变 labels: - "traefik.enable=true" - "traefik.http.routers.dashboard.rule=Host(`dashboard.foo.com`)" - "traefik.http.routers.dashboard.entrypoints=websecure" - "traefik.http.routers.dashboard.tls=true" - "traefik.http.routers.dashboard.tls.certresolver=myresolver" - "traefik.http.routers.dashboard.service=api@internal"
4. 非必要端口暴露
View服务当前配置了ports: - "8080",这会在主机上随机映射端口,若已经通过Traefik代理,建议移除该行,避免不必要的端口暴露。
验证步骤
- 停止所有容器:
docker-compose down - 应用上述所有修改
- 重新启动容器:
docker-compose up -d - 查看Traefik日志确认状态:
docker-compose logs -f reverse-proxy,重点检查是否有证书生成成功的日志、路由是否正常注册 - 访问
https://foo.com,确认HTTPS生效且服务正常访问
内容的提问来源于stack exchange,提问作者Mike3355
相关产品推荐
相关产品推荐

