Nginx Ingress Controller无重定向为URL添加尾部斜杠的规则咨询
可以实现,完全在Nginx Ingress侧通过内部URL重写完成尾部斜杠追加,全程不会给客户端返回302等重定向响应,客户端无感知。
实现原理
Nginx支持内部重写逻辑,通过指定break标记的rewrite规则,可在代理层直接修改请求路径后转发给后端,整个过程不需要和客户端交互,不会触发重定向。
具体配置方案
通过Nginx Ingress的configuration-snippet注解注入自定义rewrite规则即可,示例Ingress配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: openapi-ingress annotations: kubernetes.io/ingress.class: nginx # 注入自定义重写规则 nginx.ingress.kubernetes.io/configuration-snippet: | # 匹配末尾无斜杠且不含文件后缀的路径,追加斜杠后内部转发 rewrite ^([^.]*[^/])$ $1/ break; spec: rules: - host: your-openapi-domain.com http: paths: - path: / pathType: Prefix backend: service: name: openapi-backend-svc port: number: 80
如果你的OpenAPI接口有统一的路径前缀(比如全部以/api开头),可以把规则调整得更精准,避免影响其他路径的请求:
nginx.ingress.kubernetes.io/configuration-snippet: | # 仅对/api开头的路径追加尾部斜杠 rewrite ^/api(.*[^/])$ /api$1/ break;
上述规则会自动保留原始请求的查询参数,比如客户端请求/api/v1/user?id=123会被重写为/api/v1/user/?id=123转发给后端。
验证注意事项
- 不要使用默认的
rewrite-target注解或者带redirect/permanent标记的rewrite规则,这类配置才会触发返回给客户端的302/301重定向。 - 如果后端存在带后缀的静态资源请求,可以调整正则匹配逻辑,排除
.js/.css/.png等后缀的路径,避免误加斜杠。 - 配置后可以直接通过curl请求测试,响应状态码应为后端接口返回的正常状态码(而非302),即可验证配置生效。
内容的提问来源于stack exchange,提问作者user16628008
相关产品推荐
相关产品推荐

