如何在Kubernetes的Nginx Ingress Controller中将URL重写为小写
AKS环境下基于Nginx Ingress Controller实现URL全小写重写方案
单Ingress配置方案(按需生效,推荐)
仅需要对指定业务的Ingress规则生效时,直接在对应的Ingress资源中添加以下注解即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-frontend-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/configuration-snippet: | # 校验URI是否包含大写字母 if ($uri ~ [A-Z]) { # 重定向到全小写URL,保留原域名、请求参数和协议 rewrite ^(.*)$ ${scheme}://$host$1 lowercase_permanent; } spec: # 此处保留你原有Ingress的规则、TLS、后端服务配置不变
配置完成后执行kubectl apply -f <你的ingress配置文件路径>生效,即可实现类似test.com/CHILD自动301重定向到test.com/child的效果。
注:如果你使用AKS官方提供的Nginx Ingress插件,无需额外安装组件,上述注解可直接生效
全局配置方案(全集群Ingress统一生效)
如果需要所有经过Nginx Ingress Controller的请求都强制做小写重写,直接修改Ingress对应的ConfigMap即可:
- 编辑Nginx Ingress的核心配置ConfigMap,默认安装场景下ConfigMap名为
nginx-configuration,位于ingress-nginx命名空间;AKS官方Ingress插件的ConfigMap位于kube-system命名空间,名称为addon-http-application-routing-nginx-configuration - 在
data字段下添加如下配置:
data: http-snippet: | server { listen 80; server_name ~^(.*)$; if ($uri ~ [A-Z]) { rewrite ^(.*)$ ${scheme}://$host$1 lowercase_permanent; } }
配置更新后1分钟内自动生效,无需重启Pod。
效果验证
执行测试命令校验重写规则是否生效:
curl -I https://test.com/CHILD
返回结果中如果包含HTTP/2 301且Location字段值为全小写的https://test.com/child,说明配置生效。
内容的提问来源于stack exchange,提问作者Arup Nayak
相关产品推荐
相关产品推荐

