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

Traefik+Docker环境下非www及其他域名重定向失败问题

问题描述

我在Docker环境中使用Traefik部署网站,目标域名是https://www.example.com,需要实现两个需求:

  • 所有HTTP请求重定向至HTTPS
  • 访问example.com、www.example.app、example.app这些非目标域名及子域名时,自动重定向到https://www.example.com

当前已在traefik.yml中配置两个中间件:

- traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.https-redirect.redirectscheme.permanent=true

- traefik.http.middlewares.redirect-www.redirectregex.regex=.+
- traefik.http.middlewares.redirect-www.redirectregex.replacement=https://www.example.com
- traefik.http.middlewares.redirect-www.redirectregex.permanent=true

前端服务的Docker Compose配置片段如下:

...
- traefik.http.routers.front-http.entrypoints=http
- traefik.http.routers.front-http.rule=Host(`example.com`)
- traefik.http.routers.front-http.middlewares=https-redirect
- traefik.http.routers.front-https-redirect.entrypoints=https
- traefik.http.routers.front-https-redirect.rule=Host(`example.com`, `www.example.app`, `example.app`)
- traefik.http.routers.front-https-redirect.middlewares=redirect-www
- traefik.http.routers.front-https.entrypoints=https
- traefik.http.routers.front-https.rule=Host(`www.example.com`)
- traefik.http.routers.front-https.tls=true
- traefik.http.routers.front-https.middlewares=security
- traefik.http.routers.front-https.tls.options=tls12@file
- traefik.http.routers.front-https.tls.certresolver=le
- traefik.http.services.front.loadbalancer.passHostHeader=true
- traefik.http.services.front.loadbalancer.server.port=80
...

目前HTTP转HTTPS的重定向正常,但访问example.com、www.example.app等域名的HTTPS链接时,会出现SSL错误,无法完成重定向。

问题原因

核心问题是:当用户访问https://example.com或https://www.example.app时,Traefik必须先建立TLS连接才能触发路由规则和重定向逻辑。但当前配置中,只有front-https路由(对应www.example.com)开启了TLS并配置了证书解析器,front-https-redirect路由没有TLS配置,导致Traefik无法为这些域名提供有效SSL证书,浏览器因此报错。

解决方案

1. 为HTTPS重定向路由添加TLS配置

修改前端服务的Compose配置,给front-https-redirect路由加上TLS相关参数,让Traefik自动为这些域名申请证书:

- traefik.http.routers.front-https-redirect.entrypoints=https
- traefik.http.routers.front-https-redirect.rule=Host(`example.com`, `www.example.app`, `example.app`)
- traefik.http.routers.front-https-redirect.middlewares=redirect-www
# 新增以下两行配置
- traefik.http.routers.front-https-redirect.tls=true
- traefik.http.routers.front-https-redirect.tls.certresolver=le

2. 扩展HTTP路由规则(可选)

当前HTTP路由只匹配example.com,可以扩展规则覆盖所有需要处理的域名,确保所有HTTP请求都能被正确重定向到HTTPS:

- traefik.http.routers.front-http.entrypoints=http
# 匹配所有目标及待重定向域名
- traefik.http.routers.front-http.rule=Host(`example.com`, `www.example.app`, `example.app`, `www.example.com`)
- traefik.http.routers.front-http.middlewares=https-redirect

3. 验证配置

修改完成后,重启Traefik和前端服务,等待Let's Encrypt证书申请完成。之后访问https://example.com或https://www.example.app,应该能正常重定向到https://www.example.com,且不再出现SSL错误。

内容的提问来源于stack exchange,提问作者Arabjorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:32:30