【问题标题】:Redirect from/to www with nginx-ingress使用 nginx-ingress 从/到 www 重定向
【发布时间】:2021-02-22 22:11:37
【问题描述】:

我有一个带有 nginx-ingress 的 kubernetes 集群,我尝试使用 nginx.ingress.kubernetes.io/from-to-www-redirect 注释将 http://test.domain.com 重定向到 http://www.test.domaine.com

但它似乎不起作用。

我的入口资源:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
spec:
  rules:
  - host: www.test.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app
          servicePort: 8080
  - host: test.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app
          servicePort: 8080

我尝试了很多配置,但我无法使其工作。 nginx.ingress.kubernetes.io/from-to-www-redirect 注解无效!

【问题讨论】:

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

这是一个社区 wiki 答案。随意扩展它。

为了使其工作,您还需要使用nginx.ingress.kubernetes.io/configuration-snippet annotation。例如:

nginx.ingress.kubernetes.io/configuration-snippet: |
  if ($host = 'example.com' ) {
    rewrite ^ https://www.example.com$request_uri permanent;
  }

正如@apoorvakamath 在 cmets 中已经提到的,您可以参考this guide 的详细示例:

sn-p 是解决方案的巧妙之处。它允许您添加 入口控制器的动态配置。我们用它来检测 使用非 www 形式的 URL,然后简单地发出 重写被推出(并通过您的域返回)到 www 表格。

【讨论】:

    【解决方案2】:
    kind: Ingress
    apiVersion: networking.k8s.io/v1
    metadata:
      name: webui-ingress
      namespace: default
      annotations:
        kubernetes.io/ingress.allow-http: 'false'
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/affinity: cookie
        nginx.ingress.kubernetes.io/configuration-snippet: |
          more_set_headers "X-Frame-Options: SAMEORIGIN";
          more_set_headers "X-Xss-Protection: 0";
          more_set_headers "Referrer-Policy: use strict-origin-when-cross-origin";
          if ($host = 'test.domain.com' ) {
             return 301 https://www.test.domain.com ;
          }
        nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
        nginx.ingress.kubernetes.io/proxy-body-size: 10m
        nginx.ingress.kubernetes.io/rewrite-target: /
        nginx.ingress.kubernetes.io/session-cookie-hash: sha1
        nginx.ingress.kubernetes.io/session-cookie-name: route
        nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
        nginx.ingress.kubernetes.io/ssl-redirect: 'true'
    spec:
      tls:
        - hosts:
            - test.domain.com
          secretName: test-tls
        - hosts:
            - www.test.domain.com
          secretName: www-tls
      rules:
        - host: test.domain.com
          http:
            paths:
              - path: /
                pathType: ImplementationSpecific
                backend:
                  service:
                    name: webui
                    port:
                      number: 8022
        - host: www.test.domain.com
          http:
            paths:
              - path: /
                pathType: ImplementationSpecific
                backend:
                  service:
                    name: webui
                    port:
                      number: 8022
    

    添加以下注释后,您的域将重定向到 www

    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "X-Frame-Options: SAMEORIGIN";
      more_set_headers "X-Xss-Protection: 0";
      more_set_headers "Referrer-Policy: use strict-origin-when-cross-origin";
      if ($host = 'test.domain.com' ) {
         return 301 https://www.test.domain.com ;
      }
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2021-06-24
    • 2019-07-19
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2019-06-04
    • 2020-10-01
    相关资源
    最近更新 更多