在 Debian 上“优化 Swagger”通常指的是两类场景之一:
下面从 Debian 部署 + Swagger 使用 两个层面给你一套实用优化方案。
不要直接用 springfox / swagger-ui 内嵌页面直连后端。
sudo apt install nginx
server {
listen 80;
server_name api.example.com;
location /swagger/ {
alias /opt/swagger-ui/;
try_files $uri $uri/ /swagger/index.html;
}
location /v3/api-docs {
proxy_pass http://127.0.0.1:8080;
}
}
✅ 优点:
Swagger UI 的 JS 很大。
gzip on;
gzip_types application/javascript text/css application/json;
或者(Debian 11+):
brotli on;
brotli_types application/javascript text/css application/json;
推荐:
springdoc-openapinpm i swagger-ui-dist
然后只保留:
swagger-ui-bundle.jsswagger-ui.cssindex.html删除 demo、spec 示例文件。
生产环境不要暴露 Swagger。
spring:
profiles: dev
springdoc:
swagger-ui:
enabled: true
或用 Nginx 限制 IP:
allow 10.0.0.0/8;
deny all;
避免把所有接口都暴露。
✅ 使用分组:
@Tag(name = "用户管理")
@RestController
public class UserController {}
❌ 不要:
@Api(tags = "test")
减少无意义的字段暴露:
@Schema(description = "用户名", example = "admin")
private String username;
隐藏字段:
@Schema(hidden = true)
private String passwordHash;
Swagger 里直接支持 Token 测试:
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
接口太多时:
swagger-ui 的 urls 配置window.swaggerConfig = {
urls: [
{ name: "用户", url: "/user-api.json" },
{ name: "订单", url: "/order-api.json" }
]
}
如果只是文档展示:
SwaggerUIBundle({
docExpansion: "none",
tryItOutEnabled: false
})
Debian + Nginx:
location /v3/api-docs {
proxy_pass http://127.0.0.1:8080;
expires 10m;
}
外网可用:
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui-bundle.js"></script>
| 问题 | 解决 |
|---|---|
| Swagger 打不开 | 检查 Nginx 路径 / 防火墙 |
| JSON 为空 | 后端未开启 OpenAPI |
| 很慢 | 禁用 demo spec,启用 gzip |
| 生产暴露 | Nginx deny + profile 控制 |
你可以告诉我:
我可以直接给你 可用配置文件 / Docker / systemd 方案。