温馨提示×

CentOS Swagger错误怎么解决

小樊
44
2025-12-21 15:58:00
栏目: 智能运维

CentOS 上 Swagger 常见报错与排查步骤

一 常见症状与快速判断

  • 访问页面空白或控制台报 Failed to load API definition:多为 Nginx 反向代理未正确转发 Swagger 静态资源与接口路径,或后端未暴露 /v2/api-docs
  • Spring Boot 启动失败,日志含 Failed to start bean ‘documentationPluginsBootstrapper’:常见于 Spring Boot 与 Swagger 版本不匹配
  • 页面能打开但接口列表为空:通常是 生成/存放 swagger.json 的路径不对,或 Swagger UI 指向的 JSON 地址错误
  • 命令行报 command not found / 权限被拒绝:常见于 Composer 命令冲突或文件无执行权限
  • 能访问但样式/静态资源 404:多为 Nginx 未代理 /swagger-resources、/webjars 等路径。
  • 服务器本机能访问、外网访问不了:多为 firewalld 未放行端口或云安全组未放行。

二 Nginx 反向代理与网络连通性

  • 在 Nginx 中同时代理以下路径,并正确透传 X-Forwarded-For / X-Forwarded-Proto / X-Forwarded-Host / X-Forwarded-Port,否则会出现白屏或接口列表为空:
location /swagger-ui.html {
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto   $scheme;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Port   $server_port;
    proxy_pass http://127.0.0.1:8080/swagger-ui.html;
}
location /swagger-resources {
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto   $scheme;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Port   $server_port;
    proxy_pass http://127.0.0.1:8080/swagger-resources;
}
location /v2/api-docs {
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto   $scheme;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Port   $server_port;
    proxy_pass http://127.0.0.1:8080/v2/api-docs;
}
location /webjars {
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto   $scheme;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Port   $server_port;
    proxy_pass http://127.0.0.1:8080/webjars;
}
  • 放行防火墙端口(示例为 8080):
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
  • 若使用云服务器,还需在云厂商控制台的安全组放行对应端口。

三 Spring Boot 集成 Swagger 报错处理

  • 启动报错 Failed to start bean ‘documentationPluginsBootstrapper’:多与 Spring Boot 2.6+ 与旧版 Swagger(springfox-swagger2) 的路径匹配策略不兼容有关。可在 application.yml 添加:
spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  • 确保依赖与配置匹配(如使用 @EnableSwagger2Docket 配置),并确认应用端口与 Nginx 代理端口一致。

四 PHP 项目使用 swagger-php 生成文档

  • 安装与权限:
    • 安装 Composer 后若提示 The HOME or COMPOSER_HOME environment variable must be set,请在系统环境正确设置 HOME/COMPOSER_HOME 后再执行安装。
    • 若出现 command not found 或提示参数错误,检查是否存在 命令名冲突(如有同名二进制),必要时重命名或调整 PATH;同时确认 Composer 可执行文件具备 执行权限
  • 生成与路径:
    • 使用 zircote/swagger-php 生成文档。注意 3.x 版本生成器命令为 openapi,而 2.xswagger
# 3.x
php vendor/zircote/swagger-php/bin/openapi ./app/Controller -o public/swagger.json

# 2.x
php vendor/zircote/swagger-php/bin/swagger ./app/Controller -o public/swagger.json
  • Swagger UI 的 index.html 中将 url 指向生成的 public/swagger.json 的完整可访问地址(如 http://服务器IP:端口/swagger.json),否则会出现 Failed to load API definition

五 快速排查清单

  • 访问 http://服务器IP:端口/swagger-ui.htmlhttp://服务器IP:端口/v2/api-docs 是否能直接打开(绕过 Nginx 先定位问题)。
  • 查看后端与 Nginx 的 访问日志/错误日志,确认是否 404/502 与路径转发是否正确。
  • 核对 防火墙与云安全组 已放行对应端口。
  • 若使用容器或静态站点,确认 JSON 文件可被 Web 服务器读取URL 与路径一致

0