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

部署在EKS上的NestJS应用Swagger加载失败问题求助

解决NestJS EKS部署下Swagger文档丢失前缀重定向404问题

问题根源

Swagger UI默认会基于当前请求的根路径生成重定向地址,但EKS Ingress添加的动态前缀(如testservice/v1)并没有被Swagger识别,导致重定向时丢失前缀,跳转到根路径的/docs从而返回404。加上前缀是动态变化且非环境变量,没法提前硬编码配置。

修复方案

1. 先修正代码语法错误

你的代码中SwaggerModule.createDocument存在未闭合的括号,先补全:

const document = SwaggerModule.createDocument(app, options, { ignoreGlobalPrefix: true });

2. 动态适配请求前缀(推荐方案)

通过请求的原始URL或Ingress传递的请求头,动态提取当前路径前缀,配置给Swagger UI,确保所有请求都带上正确前缀。

方式一:基于swagger-ui-express动态配置

替换原有的app.use("*/docs",swaggerUi.serve,swaggerUi.setup(document));为以下代码:

app.use("*/docs", (req: Request, res: Response, next: NextFunction) => {
  // 优先从Ingress传递的X-Forwarded-Prefix头获取前缀,没有则从URL提取
  const basePath = (req.headers['x-forwarded-prefix'] as string) || req.originalUrl.replace(/\/docs$/, '');
  
  swaggerUi.setup(document, {
    swaggerOptions: {
      // 设置Swagger的基础路径,确保接口请求带上前缀
      basePath: basePath,
      // 禁用自动重定向,避免丢失前缀
      redirectUrl: false
    },
    customSiteTitle: 'Test API 文档'
  })(req, res, next);
}, swaggerUi.serve);

方式二:基于NestJS官方SwaggerModule动态配置

如果你更倾向于用官方模块,可通过中间件动态设置Swagger路径:

const document = SwaggerModule.createDocument(app, options, { ignoreGlobalPrefix: true });

// 处理所有前缀下的/docs请求
app.use('*/docs', (req, res, next) => {
  const basePath = (req.headers['x-forwarded-prefix'] as string) || req.originalUrl.replace(/\/docs$/, '');
  // 动态设置Swagger的访问路径
  SwaggerModule.setup(`${basePath}/docs`, app, document, {
    swaggerOptions: {
      basePath: basePath
    }
  });
  next();
});

3. 验证Ingress配置(关键)

确保EKS的Ingress配置中传递了X-Forwarded-Prefix头,让应用能准确获取前缀:

# 示例Ingress配置片段
annotations:
  nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-Prefix /testservice/v1"

不同Ingress控制器的配置语法可能略有差异,对应调整即可。

原理说明

通过动态提取请求的前缀并传递给Swagger UI的basePath配置,让Swagger所有的静态资源请求和接口调用都带上该前缀,避免重定向时丢失路径信息。同时禁用自动重定向可以直接加载文档页面,跳过可能出错的跳转逻辑。

内容的提问来源于stack exchange,提问作者salt-pepper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:45:28