K8s Ingress问题:如何禁止通过//api路径访问后端服务
解决Nginx Ingress允许//api访问的问题
当前你的Ingress配置中,Nginx默认会自动合并URL中的多个斜杠,导致//api被当作/api处理,从而命中你的路径规则。要禁止这种访问,需要做以下调整:
1. 禁用斜杠合并
添加nginx.ingress.kubernetes.io/merge-slash: "false"注解,让Nginx保留URL中的原始斜杠,不再自动合并多斜杠为单斜杠。
2. 确保路径仅匹配单斜杠开头的/api
现有路径规则/api(/|$)(.*)在禁用斜杠合并后,只会匹配以单个斜杠开头的/api路径,//api会因路径前缀不匹配而无法命中该规则。
修改后的完整Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-dev-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/merge-slash: "false" # 新增:禁用斜杠合并 cert-manager.io/cluster-issuer: acme-issuer spec: ingressClassName: public rules: - host: "test-app.xyz" http: paths: - pathType: ImplementationSpecific path: /api(/|$)(.*) backend: service: name: test-dev-api-service port: number: 80
验证效果
应用修改后的配置后:
test-app.xyz/api及test-app.xyz/api/xxx可正常访问后端服务test-app.xyz//api会返回404,无法访问后端服务
内容的提问来源于stack exchange,提问作者Uvindu Sahan
相关产品推荐
相关产品推荐

