在 Linux 环境下优化 Swagger(通常指 Swagger UI / OpenAPI),一般从 性能、安全、使用体验、部署方式 几个角度来考虑。下面按常见场景给你一个系统化的优化方案。
原则:开发/测试可用,生产关闭或鉴权
spring:
profiles: dev
springdoc:
api-docs:
enabled: true
swagger-ui:
enabled: true
生产环境:
spring:
profiles: prod
springdoc:
api-docs:
enabled: false
swagger-ui:
enabled: false
或通过代码控制:
@Profile("dev")
@Configuration
public class SwaggerConfig {
}
✅ 优化效果
避免扫描整个 classpath
@OpenAPIDefinition(
info = @Info(title = "API", version = "1.0")
)
@SpringBootApplication
public class Application {
}
或限制扫描包:
@Operation(hidden = true)
或:
springdoc:
packages-to-scan: com.example.api
✅ 减少 CPU 和内存占用
springdoc:
cache:
disabled: false
default-flat-param-object: false
或关闭 example 生成:
springdoc:
model-and-view-allowed: false
Swagger UI 会频繁请求:
/v3/api-docs
✅ Nginx 缓存
location /v3/api-docs {
proxy_pass http://localhost:8080;
expires 10m;
add_header Cache-Control "public, max-age=600";
}
✅ 减少接口重复生成
避免每次从 GitHub 加载 Swagger UI
wget https://github.com/swagger-api/swagger-ui/archive/refs/tags/v5.17.14.zip
解压后放入 nginx:
location /swagger-ui/ {
root /usr/share/nginx/html;
index index.html;
}
✅ 效果
只保留:
swagger-ui-bundle.js
swagger-ui-standalone-preset.js
swagger-ui.css
删除 example、demo、test 文件
java -Xms512m -Xmx1024m \
-XX:+UseG1GC \
-jar app.jar
✅ 减少 Swagger 启动时 GC 压力
location /swagger/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
}
✅ 防止直接暴露服务端口
@SecurityScheme(
name = "basicAuth",
type = SecuritySchemeType.HTTP,
scheme = "basic"
)
@SecurityScheme(
name = "bearerAuth",
type = SecuritySchemeType.HTTP,
scheme = "bearer",
bearerFormat = "JWT"
)
allow 192.168.1.0/24;
deny all;
✅ 防止 Swagger 被公网扫描
| 问题 | 优化方式 |
|---|---|
| Swagger 启动慢 | 缩小扫描包 |
| CPU 占用高 | 关闭 production 环境 |
| 接口信息泄露 | 加鉴权 |
| Swagger UI 打不开 | 检查 Nginx 静态路径 |
| JSON 过大 | 拆分 API 文档 |
✅ 最佳组合
如果你愿意,可以告诉我:
我可以给你一套 针对你项目的专用优化方案。