Nginx重写带有和不带有尾部斜杠的URL



我在Helm中使用Nginx注释,比如:

ingress:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: "example.com"
paths:
- path: /api(/?)(.*)

当访问example.com/api/时,我的URL会按预期重写,并且我会被转发到我的应用程序。

但是,如果省略了尾部斜线,例如example.com/api,则不再是这种情况。我能做些什么来确保没有包含斜杠的场景得到正确评估?

我认为您正在搜索regex替代方案?

ingress:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: "example.com"
paths:
- path: /api(/|$)(.*)

要么在/api之后有另一个/,它包含任何内容(由$2捕获(,要么是行的末尾,这将使/api重写为/

您可以尝试在paths数组中为该特定端点添加另一个路径:

ingress:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: "example.com"
paths:
- path: /api
...
- path: /api(/?)(.*)
...

如果您使用K8s 1.18或更高版本,您可以利用pathType

ingress:
hosts:
- host: "example.com"
paths:
- path: /api
pathType: Prefix

最新更新