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

Nginx-Ingress与Kubernetes:非/路由请求均返回404问题求助

问题排查与解决方案

你的核心问题是Ingress路径转发规则配置错误,尤其是尝试添加的rewrite-target: /会破坏后端服务的路由匹配逻辑,导致除根路径外的请求返回404。以下是具体排查和修复方案:


问题根源

你添加的nginx.ingress.kubernetes.io/rewrite-target: /会将所有匹配/api/users/?(.*)的请求路径强制重写为/,但你的Express服务根本没有配置/路径的路由(只有/api/users/currentuser),自然返回404。同时,当前Ingress的正则路径与转发逻辑的配合也存在问题。


可行解决方案

方案一:正则路径+正确重写规则

修改Ingress配置,使用正则捕获分组并正确转发路径,确保后端服务能匹配到完整路由:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 用$1引用正则捕获的/api/users/之后的部分
    nginx.ingress.kubernetes.io/rewrite-target: /api/users/$1
spec:
  rules:
    - host: ticketing.com
      http:
        paths:
          - path: /api/users/?(.*)
            # 使用正则时推荐设置为ImplementationSpecific,避免匹配逻辑冲突
            pathType: ImplementationSpecific
            backend:
              service:
                name: auth-srv
                port:
                  number: 3000

方案二:Prefix路径匹配(无需正则)

如果不需要复杂的正则匹配,直接用Prefix类型匹配所有/api/users/开头的请求,完整保留原路径转发:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: ticketing.com
      http:
        paths:
          - path: /api/users/
            pathType: Prefix
            backend:
              service:
                name: auth-srv
                port:
                  number: 3000

验证步骤

  1. 应用修改后的Ingress配置:
kubectl apply -f <你的Ingress配置文件名>
  1. 检查Ingress状态,确保规则生效:
kubectl get ingress
  1. 测试请求:
curl http://ticketing.com/api/users/currentuser

此时应该正常返回Hi there!。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:35:21