NestJS Swagger仅支持HTTPS且VPN下无法加载问题求助
解决方案:Swagger HTTP访问及VPN加载问题处理
针对你在Windows Server + PM2 + NestJS环境下遇到的Swagger异常,以下是针对性的修复步骤:
问题1:Swagger仅支持HTTPS访问,HTTP无法打开
核心原因
默认启用的helmet()会设置严格的内容安全策略(CSP),拦截Swagger UI依赖的CDN资源(如cdn.jsdelivr.net的样式/脚本),导致HTTP环境下页面无法加载。同时strictTransportSecurity头可能强制跳转HTTPS。
修复代码
修改main.ts中的Helmet配置,放宽CSP策略并关闭强制HTTPS:
app.use(helmet({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], // 允许Swagger UI的CDN资源和内联样式 styleSrc: ["'self'", "'unsafe-inline'", "https://cdn.jsdelivr.net"], // 允许Swagger UI的脚本执行需求 scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'", "https://cdn.jsdelivr.net"], imgSrc: ["'self'", "data:"], }, }, // 关闭强制HTTPS跳转,适配HTTP访问场景 strictTransportSecurity: false, }));
问题2:VPN环境下Swagger无法加载,其他接口正常
原因1:CORS配置未覆盖VPN客户端
VPN访问时的客户端Origin不在CORS_ORIGIN允许列表中,导致Swagger UI的AJAX请求被拦截。
修复方式
临时放宽CORS配置测试(生产环境需替换为具体域名/IP段):
app.enableCors({ origin: '*', // 测试用,生产建议指定VPN客户端的IP或域名 credentials: true, });
原因2:Swagger文档未配置VPN可访问的服务器地址
Swagger UI默认使用当前访问的协议/地址请求接口,VPN环境下可能解析错误。
修复方式
在Swagger配置中添加VPN可访问的服务器地址:
const swaggerConfig = new DocumentBuilder() .setTitle('Logo Api') .setDescription('TCS Logo Api Documentation') .setVersion('1.0.0') // 添加HTTP/HTTPS及VPN专用访问地址 .addServer(`http://${configService.get('SERVER_HOST')}:${configService.get('PORT')}`) .addServer(`https://${configService.get('SERVER_HOST')}:${configService.get('HTTPS_PORT') || 443}`) .addServer(`http://${configService.get('VPN_SERVER_HOST')}:${configService.get('PORT')}`) .addBearerAuth( { description: `Please enter token in following format: Bearer <JWT>`, name: 'Authorization', bearerFormat: 'Bearer', scheme: 'Bearer', type: 'http', in: 'Header' }, 'access-token', ) .build()
需在配置文件中补充SERVER_HOST(服务器内网/公网IP)、VPN_SERVER_HOST(VPN访问时的服务器地址)。
原因3:防火墙或PM2进程未生效
- 检查Windows Server防火墙,确保应用端口允许VPN客户端IP访问;
- 重启PM2应用使配置生效:
pm2 restart <你的应用名称>
额外排查步骤
- 用Postman测试VPN环境下的
http://<VPN_SERVER_IP>:<PORT>/api/json,若能返回Swagger JSON文档,说明是UI资源加载问题;若无法返回,检查路由是否被拦截。 - 打开浏览器F12控制台,查看VPN访问时的具体错误(CORS/404/资源加载失败),精准定位问题。
内容的提问来源于stack exchange,提问作者Gravis
相关产品推荐
相关产品推荐

