Nginx Ingress路径重写转发后端服务返回404问题求助
故障原因
配置存在三处问题直接触发404响应:
- 重写规则捕获组序号匹配错误:你定义的路径正则为
/httpbin(/|$)(.*),包含两个捕获组:$1匹配/httpbin后紧跟的斜杠或路径结束标识$2匹配/httpbin前缀后的真实业务路径
当前配置rewrite-target: /$1会把请求重写到//或/,无法匹配后端httpbin的对应路径。
- 路径类型配置错误:
pathType: Prefix为字面量前缀匹配模式,不会解析path字段中的正则语法,控制器会直接把/httpbin(/|$)(.*)当成普通字符串路径做匹配,根本无法命中你发起的/httpbin/anything请求。 - 冗余配置引发潜在冲突:你添加的
configuration-snippet末尾斜杠跳转规则属于多余配置,nginx-ingress的标准rewrite逻辑已经自动兼容该场景,额外添加反而可能引发循环跳转问题。
修复配置
直接替换原有Ingress配置即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: mikie-ingress namespace: mikie annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: - host: abczzz.com http: paths: - path: /httpbin(/|$)(.*) pathType: ImplementationSpecific backend: service: name: httpbin-service port: number: 8999
效果验证
配置生效1-2分钟后执行测试命令:
curl -I -k http://abczzz.com/httpbin/anything
将正常返回200状态码,后端httpbin服务收到的请求路径为/anything,符合前缀剥离的需求。
该配置自动兼容以下访问场景:
- 访问
/httpbin:自动跳转到/httpbin/,最终转发到后端根路径/ - 访问
/httpbin/:直接转发到后端根路径/ - 访问
/httpbin/<任意子路径>:自动剥离/httpbin前缀,将子路径透传给后端服务
内容的提问来源于stack exchange,提问作者A Bit of Help
相关产品推荐
相关产品推荐

