Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用nginx捕获组附加前缀以重写规则_Nginx_Kubernetes_Kubernetes Ingress - Fatal编程技术网

如何使用nginx捕获组附加前缀以重写规则

如何使用nginx捕获组附加前缀以重写规则,nginx,kubernetes,kubernetes-ingress,Nginx,Kubernetes,Kubernetes Ingress,我目前正试图重写kubernetes ingress中的四条路径 这三个步骤都完成了,但是静态文件路径有点棘手 我的前端路径是/$1->/(.*)web前端群集ip服务 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: servers-ingress-service annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubern

我目前正试图重写kubernetes ingress中的四条路径

这三个步骤都完成了,但是静态文件路径有点棘手

我的前端路径是
/$1
->
/(.*)
web前端群集ip服务

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: servers-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: apollo-api-cluster-ip-service
              servicePort: 4000
            path: /apollo_api/?(.*)
          - backend:
              serviceName: rest-api-cluster-ip-service
              servicePort: 5000
            path: /rest/?(.*)
          - backend:
              serviceName: web-front-cluster-ip-service
              servicePort: 6000
            path: /?(.*)
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: statics-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /img/$1
spec:
  rules:
    - http:
        paths:
        - backend:
            serviceName: apollo-api-cluster-ip-service
            servicePort: 4000
          path: /img/?$(.*)
我还需要重写所有
/img/$1
->
/img/(*)
apollo api集群ip服务

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: servers-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: apollo-api-cluster-ip-service
              servicePort: 4000
            path: /apollo_api/?(.*)
          - backend:
              serviceName: rest-api-cluster-ip-service
              servicePort: 5000
            path: /rest/?(.*)
          - backend:
              serviceName: web-front-cluster-ip-service
              servicePort: 6000
            path: /?(.*)
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: statics-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /img/$1
spec:
  rules:
    - http:
        paths:
        - backend:
            serviceName: apollo-api-cluster-ip-service
            servicePort: 4000
          path: /img/?$(.*)
我的当前设置如上所示,但由于未知原因,我无法到达第二条路由配置的路由

所以我要做的是将两条路由组合在一起,并提供前缀来捕获匹配
/img

如果我这样做

      - backend:
          serviceName: apollo-api-cluster-ip-service
          servicePort: 6000
        path: /?(.*)
当我需要将任何不以
/img
开头的路由路由到
web front

所以我需要下面这样的东西

      - backend:
          serviceName: apollo-api-cluster-ip-service
          servicePort: 4000
        path: /img?(.*) <- somehow add /img to $(.*) because currently it rewrites `/img/static.png` -> `/static.png` but I need `/img/static.png` -> `/img/static.png`.
-后端:
serviceName:apollo api群集ip服务
服务端口:4000
路径:/img?(.*)`/static.png`但我需要`/img/static.png`->`/img/static.png`。
如有任何帮助,将不胜感激。

如中所述:

!!!注意从版本0.22.0开始,使用 注释nginx.ingres.kubernetes.io/rewrite-target不可用 向后兼容以前的版本。在版本0.22.0和 除此之外,请求URI中需要传递的任何子字符串 必须在捕获组中明确定义重写路径

!!!注意:捕获的组按时间顺序保存在带编号的占位符中,格式为$1、$2$N这些占位符可以是 用作重写目标批注中的参数

所以我想你的第二次进入应该是这样的:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: statics-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /img/$2
spec:
  rules:
    - http:
        paths:
        - backend:
            serviceName: apollo-api-cluster-ip-service
            servicePort: 4000
          path: /img(/|$)(.*)

在这种情况下,
$2
将反映
(.*)

如何解决它?