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

Redirect in Traefik from one domain to another

根据 Traefik 1.7 documentation,您应该能够让 Traefik 使用以下方法执行 302 重定向:

我的目标是简单地从地址中删除 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/
spec:
  rules:
  - host: www.example.com

不幸的是,文档没有明确说明如何使用它们。在撰写本文时,唯一 google 命中的是文档(上方)。

我目前的解决方法(假设它会帮助解释问题)是将 www. 流量路由到 returns 302 的 nginx。

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

这似乎有点矫枉过正。

我遇到了同样的问题,但最终使它适用于:

---
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://"
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