gpt4 book ai didi

kubernetes - 如何在 kubernetes 上的 nginx Controller 中将 URL 重写为小写

转载 作者:行者123 更新时间:2023-12-04 14:48:44 25 4
gpt4 key购买 nike

我有一个要求将所有 URL 重写为小写。

例如test.com/CHILDtest.com/child

前端应用程序是在 docker 上基于 azure kubernetes 服务开发的。入口由 nginx 入口 Controller 控制。

最佳答案

您可以使用 Lua 重写 URL,如 Enforce Lower Case URLs (NGINX) 中所述文章。

我们需要做的就是在 nginx 中添加以下配置 block :

location ~ [A-Z] {
rewrite_by_lua_block {
ngx.redirect(string.lower(ngx.var.uri), 301);
}
}

我会告诉你它是如何工作的。


首先,我使用前面提到的配置创建了一个 Ingress 资源:

$ cat test-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/server-snippet: |
location ~ [A-Z] {
rewrite_by_lua_block {
ngx.redirect(string.lower(ngx.var.uri), 301);
}
}
spec:
rules:
- http:
paths:
- path: /app-1
pathType: Prefix
backend:
service:
name: app-1
port:
number: 80


$ kubectl apply -f test-ingress.yaml
ingress.networking.k8s.io/test-ingress created

$ kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress <none> * <PUBLIC_IP> 80 58s

然后我创建了一个示例 app-1 Pod 并将其暴露在端口 80 上:

$ kubectl run app-1 --image=nginx
pod/app-1 created

$ kubectl expose pod app-1 --port=80
service/app-1 exposed

最后,我们可以测试重写是否按预期工作:

$ curl -I <PUBLIC_IP>/APP-1
HTTP/1.1 301 Moved Permanently
Date: Wed, 06 Oct 2021 13:53:56 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: /app-1

$ curl -L <PUBLIC_IP>/APP-1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

此外,在 ingress-nginx-controller 日志中,我们可以看到以下日志条目:

10.128.15.213 - - [06/Oct/2021:13:54:34 +0000] "GET /APP-1 HTTP/1.1" 301 162 "-" "curl/7.64.0" 83 0.000 [-] [] - - - - c4720e38c06137424f7b951e06c3762b
10.128.15.213 - - [06/Oct/2021:13:54:34 +0000] "GET /app-1 HTTP/1.1" 200 615 "-" "curl/7.64.0" 83 0.001 [default-app-1-80] [] 10.4.1.13:80 615 0.001 200 f96b5664765035de8832abebefcabccf

关于kubernetes - 如何在 kubernetes 上的 nginx Controller 中将 URL 重写为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69457190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com