Traefik 1.7 域名重定向问题:移除www时出现404服务未找到
解决Traefik 1.7中移除www前缀重定向导致的404问题
我之前在Traefik 1.7环境里配置www转非www的302重定向时,也碰到过一模一样的404问题,后来排查发现是正则匹配和Ingress规则的配合出了问题,给你整理下可行的解决方案:
正确的注解配置方式
首先确保你的Ingress注解里的正则和替换规则符合Go语言正则规范,Traefik 1.7对这两个注解的语法要求比较严格。以下是经过验证的配置示例:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: your-app-ingress annotations: traefik.ingress.kubernetes.io/redirect-regex: ^https?://www\.(.*)$ traefik.ingress.kubernetes.io/redirect-replacement: https://$1 # 默认是302临时重定向,若需301永久重定向可添加下面这句 # traefik.ingress.kubernetes.io/redirect-permanent: "false" spec: rules: # 必须配置非www域名的规则,对应重定向后的目标地址 - host: example.com http: paths: - path: / backend: serviceName: your-backend-service servicePort: 80 # 关键:必须同时配置www域名的规则,否则Traefik无法触发重定向逻辑 - host: www.example.com http: paths: - path: / backend: serviceName: your-backend-service servicePort: 80
404问题的核心原因
最常见的两个触发点:
- 缺失www域名的Ingress规则:Traefik只有匹配到对应的Ingress host规则时,才会执行注解里的重定向逻辑。如果只配置了
example.com,没加www.example.com,Traefik会直接返回404,根本不会进入重定向流程。 - 正则表达式错误:比如正则没写全(少了
$结尾导致匹配不精确),或者捕获组使用错误(比如误用$0而非$1),导致重定向后的地址无效。
快速排查步骤
- 查看Traefik Pod日志,搜索你的www域名请求,确认是否有重定向相关日志:
若没有该日志,说明Traefik未匹配到对应的Ingress规则,检查host配置。time="..." level=debug msg="Redirecting to https://example.com" - 用curl测试请求,查看返回的Location头是否正确:
若Location地址不符合预期,调整正则和替换规则。curl -I https://www.example.com
临时替代方案
如果注解配置暂时无法生效,可以在Traefik静态配置文件(traefik.toml)中添加全局重定向规则(全局生效,适合应急):
[entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] regex = "^http://www\\.(.*)" replacement = "http://$1" permanent = false [entryPoints.https] address = ":443" [entryPoints.https.redirect] regex = "^https://www\\.(.*)" replacement = "https://$1" permanent = false
内容的提问来源于stack exchange,提问作者DanielM
相关产品推荐
相关产品推荐

