nginx - Ingress-Nginx 的正则表达式路径匹配

标签 nginx kubernetes kubernetes-ingress nginx-ingress

我正在 kubernetes 中使用 ingress-nginx 来设置服务器。 问题是路径根本没有路由,并且我发出的任何请求都从 nginx 服务器收到 404 错误。 下面是我的入口代码:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  # defaultBackend:
  #   service:
  #     name: auth-srv
  #     port:
  #       number: 3000
  rules:
    - host: app.dev
    - http:
        paths:
          - pathType: Prefix
            path: /api/auth/?(.*)
            backend:
              service:
                name: auth-srv
                port:
                  number: 3000
          - path: /api/coms/?(.*)
            pathType: Prefix
            backend:
              service:
                name: coms-srv
                port:
                  number: 3000

如果我取消注释默认后端服务,我会收到响应,但一旦删除它,我就会收到 404 nginx 错误。所以我知道它连接到我设置的服务。

我不知道我哪里出了问题,如何解决这个问题,因为我直接从 docs 复制。任何帮助或见解都会很棒。预先感谢您!

编辑 1: 我从路径中删除了正则表达式,并注释掉了/api/auth 路径,因此不应有任何请求发送至 auth-srv。由于某种原因,所有请求都会路由到 auth-srv,即使没有映射到它。注意:auth 和 coms pod/服务都在后台运行,只是 ingress-nginx 仍然无法正确路由。

最佳答案

所以这不能正确路由的原因是:

    - host: app.dev
    - http:

“http”前面的“-”使 Controller 认为它是自己的规则集,因此以下路由有一个主机“*”。删除“http”前面的“-”后,规则被设置为 app.dev 的正确主机,并开始相应的路由。

谢谢大家的帮助!这是多么漫长的一天啊:')

关于nginx - Ingress-Nginx 的正则表达式路径匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67994965/

相关文章:

apache - Node.js 事件循环 - nginx/apache

ssl - Istio 服务网格 TLS 配置

file - 不能用Nginx(反向代理+SSL协商)和Tomcat上传大文件

当我在 url 中使用已知文件扩展名时,nginx 404

kubernetes - 为什么要使用 kubeadm 手动生成证书?

java - 正在进行的快照太多。增加kafka生产者池的大小或减少并发检查点的数量

docker - Windows操作系统上的Kubernetes集群主节点

kubernetes - Nginx入口是否可以使用多种身份验证类型?

Nginx Ingress Controller 抛出 400 Bad Request 错误

Nginx proxy_pass,定义不匹配的情况?