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

AWS EKS中Nginx Ingress的微服务Swagger重定向配置问题

解决Nginx Ingress下Swagger根路径重定向404问题

你的问题核心是:访问服务根路径(如/customerservice)时,后端Swagger服务会重定向到/swagger/,但这个路径没有带上服务前缀,导致Ingress无法匹配到对应后端服务,从而返回404。下面是两种直接在Ingress层面解决的方案:

方案一:添加配置片段实现精准重定向

通过configuration-snippet注解,给每个服务根路径添加强制重定向规则,直接跳转到带服务前缀的swagger/index.html:

修改后的Ingress配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/customerservice$ /customerservice/swagger/index.html permanent;
      rewrite ^/customerservice/$ /customerservice/swagger/index.html permanent;
      rewrite ^/orderservice$ /orderservice/swagger/index.html permanent;
      rewrite ^/orderservice/$ /orderservice/swagger/index.html permanent;
      # 其他23个服务同理添加对应的rewrite规则
  labels:
    app: trial-ingress
  name: trial-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          service:
            name: customerservice-svc
            port:
              number: 80
        path: /customerservice(/|$)(.*)
        pathType: Prefix
      - backend:
          service:
            name: orderservice-svc
            port:
              number: 80
        path: /orderservice(/|$)(.*)
        pathType: Prefix

这个方案直接在Ingress层面拦截根路径请求,强制跳转到正确的Swagger页面,无需修改后端服务配置。

方案二:添加单独的路径匹配规则

给每个服务的根路径单独添加一条Ingress路径,直接将请求rewrite到后端的/swagger/index.html:

修改后的Ingress配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  labels:
    app: trial-ingress
  name: trial-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      # 处理customerservice根路径跳转
      - backend:
          service:
            name: customerservice-svc
            port:
              number: 80
        path: /customerservice(/?$)
        pathType: Prefix
        nginx.ingress.kubernetes.io/rewrite-target: /swagger/index.html
      # 处理customerservice API路径
      - backend:
          service:
            name: customerservice-svc
            port:
              number: 80
        path: /customerservice/(.*)
        pathType: Prefix
        nginx.ingress.kubernetes.io/rewrite-target: /$1
      # orderservice同理配置
      - backend:
          service:
            name: orderservice-svc
            port:
              number: 80
        path: /orderservice(/?$)
        pathType: Prefix
        nginx.ingress.kubernetes.io/rewrite-target: /swagger/index.html
      - backend:
          service:
            name: orderservice-svc
            port:
              number: 80
        path: /orderservice/(.*)
        pathType: Prefix
        nginx.ingress.kubernetes.io/rewrite-target: /$1

注意这个方案需要使用路径级别的rewrite-target注解,确保Ingress版本支持该特性。

额外提示

由于你有25个服务,手动编写规则会比较繁琐,建议用Kubernetes的Helm模板或Kustomize批量生成Ingress配置,减少重复劳动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:52:10