You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

nginx-ingress配置rewrite-target后/api路径访问异常如何解决?

问题原因分析
  • 未添加rewrite-target注解时,Ingress会将原始请求路径完整透传给后端服务,你访问dev.example.com/api/check_version时,后端Ruby服务收到的请求路径为/api/check_version,和服务本身定义的/check_version路由不匹配,所以报错。
  • 添加nginx.ingress.kubernetes.io/rewrite-target: /注解后,所有匹配/api前缀的请求都会被重写为根路径/透传给后端,此时访问/api/check_version后端收到的路径是/,自然也没有匹配的路由。
正确配置方案

你需要使用Ingress Nginx的rewrite规则捕获/api前缀后的路径,重写后透传给后端,完整配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-dev
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: 'dev.example.com'
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: my-ruby
            port:
              number: 3000
配置说明
  • 路径规则/api(/|$)(.*)中的第二个括号为捕获组,会匹配/api后面的所有路径内容,对应占位符$2
  • 重写规则/$2会将捕获到的实际路径拼接为最终转发路径:请求/api/check_version时,$2取值为check_version,转发到后端的路径为/check_version,和服务路由匹配
  • pathType设置为ImplementationSpecific,适配正则形式的路径匹配规则
  • 如果你需要保留/api前缀转发,只需要给后端服务的路由统一加上/api前缀即可,不需要添加rewrite相关注解

内容的提问来源于stack exchange,提问作者Swarovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:05