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
验证步骤
- 应用修改后的Ingress配置:
kubectl apply -f <你的Ingress配置文件名>
- 检查Ingress状态,确保规则生效:
kubectl get ingress
- 测试请求:
curl http://ticketing.com/api/users/currentuser
此时应该正常返回Hi there!。
内容的提问来源于stack exchange,提问作者Louis Sankey
相关产品推荐
相关产品推荐

