在 Traefik 中从一个域重定向到另一个域

Posted

技术标签:

【中文标题】在 Traefik 中从一个域重定向到另一个域【英文标题】:Redirect in Traefik from one domain to another 【发布时间】:2018-07-15 14:47:05 【问题描述】:

根据Traefik 1.7 documentation,您应该可以让 Traefik 使用以下命令执行 302 重定向:

traefik.ingress.kubernetes.io/redirect-regex traefik.ingress.kubernetes.io/redirect-replacement

我的目标是简单地从地址中删除 www.

这是我尝试过的,但我得到一个 404 服务未找到。

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: www-redirect
  namespace: public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/redirect-regex: ^https?://www.example.com/(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://example.com/$1
spec:
  rules:
  - host: www.example.com

不幸的是,文档没有明确说明如何 使用它们。在撰写本文时,谷歌对此的唯一点击是文档(上图)。

我目前的工作(假设它有助于解释问题)是将www. 流量路由到返回 302 的 nginx

server 
    listen       80;
    server_name  www.example.com;
    return 302 https://example.com$request_uri;

这似乎有点过头了。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,最后解决了:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: www-redirect
  namespace: public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/preserve-host: "true"
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
    traefik.ingress.kubernetes.io/redirect-regex: "^https://www.(.*)"
    traefik.ingress.kubernetes.io/redirect-replacement: "https://$1"
spec:
  tls:
    - hosts:
        - "example.com"
        - "www.example.com"
      secretName: example-tls
  rules:
  - host: example.com
  - host: www.example.com

基本上我需要两条规则。

作为旁注,我还使用以下标志启动 trafik pod:

args:
   - --api
   - --kubernetes
   - --logLevel=INFO
   - --entryPoints=Name:https Address::443 TLS
   - --entrypoints=Name:http Address::80 Redirect.EntryPoint:https
   - --defaultentrypoints=https,http

【讨论】:

顺便说一句,我们在与命名空间相关的--kubernetes 标志上遇到了很多麻烦,强烈建议改用配置文件。

以上是关于在 Traefik 中从一个域重定向到另一个域的主要内容,如果未能解决你的问题,请参考以下文章

Fiddler:如何将路径从一个域重定向到另一个域

301使用.htaccess将一个域重定向到另一个域

将域重定向到另一个域并更改 url [关闭]

将域重定向到另一个域并将重定向的域附加为查询字符串

301 使用 web.config 将一个域重定向到另一个域

需要将域重定向到另一个域而不影响电子邮件