【问题标题】:Nginx Ingress "rewrite-target" annotation not rewriting targetNginx Ingress“rewrite-target”注释不重写目标
【发布时间】:2021-01-02 13:55:56
【问题描述】:

我的入口资源上的“nginx.ingress.kubernetes.io/rewrite-target”注释似乎没有做任何事情。当我将path: /helloworld 更改为path: / 时,一切正常。我尝试将注释的值放在双引号中并将注释的顺序更改为无效。我错过了什么?看起来这应该是相当简单的。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: helloworld-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: <NGINX_CONTROLLER_EXTERNAL_IP>.xip.io
    http:
      paths:
      - backend:
          serviceName: helloworld-svc
          servicePort: 80
        path: /helloworld

【问题讨论】:

  • 那么你到达后端服务了,但是路径还是/helloworld
  • 我经常看到与正则表达式一起使用的重写目标。 IE。 nginx.ingress.kubernetes.io/rewrite-target: /$2path: /helloworld(/|$)(.*)。这样,您将重写以删除 /helloworld,但保留路径的其余部分。但是,如果您总是想重写根路径,我认为它应该像您所做的那样工作.. :thinking:
  • @ChristianFosli 你是对的。它应该可以工作,并且在大多数情况下都可以。事实证明,问题也与路径指向的服务有关。它是一个服务于 React.js 应用程序的 Nginx 服务器。我添加了一个答案,其中包含指向有关该问题的更详细帖子的链接。无论如何,感谢您的努力。
  • 不用担心 :-) 是的,因为 React.js 在客户端工作,所以这种重写不会有任何区别。

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

我解决了我的问题。它与“重写目标”注释本身无关。我试图将它指向一个服务于 React.js 应用程序的 Nginx 服务器。我需要在 React 应用程序中设置基本 URL,并将构建复制到 Dockerfile 中 /usr/share/nginx/html 的相应子目录。采取这些步骤后,不再需要使用“rewrite-target”。我发布了一个 separate question 详细说明了使用 React 和 Nginx 的设置并回答了它。

【讨论】:

    【解决方案2】:

    如果你想在 / 上下文中重写,你需要使用 app-root。 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rewrite

    【讨论】:

    • 感谢您的帮助。该问题与“重写目标”注释无关。我添加了一个带有更详细帖子链接的答案,以防有人遇到同样的问题。
    猜你喜欢
    • 2022-01-08
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2019-12-19
    • 2018-12-12
    • 2020-06-30
    • 2020-04-16
    相关资源
    最近更新 更多