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

Nginx Ingress /api路径转发至后端服务/api而非根路径问题求助

问题根因

Nginx Ingress 默认会将请求携带的完整路径透传给后端Service,你当前配置的/api前缀匹配规则下,http://example.com/api/xxx会直接转发到api-service的/api/xxx路径,符合默认转发逻辑。

解决方案
  • 方案1:使用rewrite注解移除前缀(最常用,适配现有单Ingress配置场景)
    你只需要在Ingress的metadata.annotations中添加重写规则,同时调整/api的路径匹配规则即可,修改后的完整配置如下:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-client
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      namespace: dev
    spec:
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: client-service
                port: 
                  number: 80
          - path: /api(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: api-service
                port: 
                  number: 80
    

    规则说明:路径正则/api(/|$)(.*)中的$2会匹配/api后面的所有路径内容,重写目标/$2会直接丢弃/api前缀,比如请求http://example.com/api会转发到api-service的/路径,请求http://example.com/api/user会转发到api-service的/user路径。

  • 方案2:拆分独立Ingress资源(适合多路径转发规则差异大的场景)
    如果你不想让重写规则影响Ingress下的其他路径配置,可以把/api相关的路由拆成单独的Ingress资源,仅给这个资源添加重写注解即可,不会干扰现有/client相关的转发逻辑。

配置验证

更新配置后可以直接发请求验证:
curl http://example.com/api
查看api-service的访问日志,确认请求路径为根路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:39:02