如何使用nginx捕获组附加前缀以重写规则
我目前正试图重写kubernetes ingress中的四条路径 这三个步骤都完成了,但是静态文件路径有点棘手 我的前端路径是如何使用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
/$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
将反映(.*)
如何解决它?