Swagger在Linux系統中的故障排查指南
swagger-ui.html
或/swagger
端點時出現404 Not Found、連接被拒絕或頁面空白。ps aux | grep "swagger"
(Java項目)或systemctl status your-swagger-service
確認服務是否啟動;若未啟動,使用systemctl start your-swagger-service
啟動服務。netstat -tulnp | grep <swagger-port>
(如8080)或ss -lntp | grep <port>
檢查應用是否在正確端口監聽;若未監聽,檢查應用配置(如Spring Boot的server.port
)。sudo ufw status
查看防火墻規則,若端口未開放,執行sudo ufw allow <port>/tcp
;若使用云服務器,還需檢查安全組規則是否允許入站流量。application.properties
或application.yml
中的spring.resources.static-locations
是否包含Swagger UI的靜態資源路徑(如classpath:/META-INF/resources/
);若使用Nginx代理,需配置location
塊指向正確路徑(如proxy_pass http://localhost:5000;
)。@Api
注解(Swagger 2),方法有@ApiOperation
注解;模型類有@ApiModel
和@ApiModelProperty
注解(如Java項目)。mvn dependency:tree | grep swagger
(Maven)或npm list swagger
(Node.js)查看依賴版本;確保Swagger核心庫(如springfox-swagger2
)與UI庫(如springfox-swagger-ui
)版本一致,且與框架(如Spring Boot)版本兼容(如Spring Boot 2.7.x適配springfox-swagger2
2.9.2)。pathMapping
(如Spring Boot的Docket
配置.pathMapping("/api-docs")
),確保與訪問URL一致;使用curl -v http://localhost:<port>/swagger.json
驗證JSON文件是否能正常獲取。WebMvcConfigurer
Bean(如@Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedOrigins("*").allowedMethods("*"); } }; }
);或在Swagger配置中添加@CrossOrigin
注解。add_header 'Access-Control-Allow-Origin' '*';
和add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
到location
塊。Docket
配置securitySchemes
(如apiKey
)和securityContexts
(如anyRequest().authenticated()
);例如:@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.securitySchemes(Arrays.asList(apiKey()))
.securityContexts(Arrays.asList(securityContext()))
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
private ApiKey apiKey() { return new ApiKey("Bearer", "Authorization", "header"); }
private SecurityContext securityContext() { return SecurityContext.builder().securityReferences(defaultAuth()).build(); }
private List<SecurityReference> defaultAuth() { return Arrays.asList(new SecurityReference("Bearer", new AuthorizationScope[0])); }
Authorization
頭)。NoSuchMethodError
、ClassNotFoundException
),或Swagger UI無法加載。mvn dependency:tree
(Maven)或gradle dependencies
(Gradle)查看依賴沖突;重點檢查springfox-swagger2
、springfox-swagger-ui
與其他庫(如spring-boot-starter-web
)的版本兼容性。pom.xml
中使用<exclusions>
排除沖突的依賴(如<exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion>
),或升級到兼容版本。journalctl -u your-service-name -f
(Systemd服務)或tail -f /var/log/spring-boot-app.log
(Spring Boot默認日志路徑)實時查看日志;通過grep -i "swagger"
過濾Swagger相關日志,定位具體錯誤(如NullPointerException
、ConfigurationException
)。application.properties
中添加logging.level.io.swagger=DEBUG
,或在啟動命令中添加--debug
參數,獲取更詳細的日志信息。curl -v http://localhost:<port>/api-endpoint
測試API是否能正常響應;若curl
成功但Swagger無法訪問,可能是前端配置問題。ping your-server-ip
測試服務器可達性;使用traceroute your-server-ip
檢查網絡路由是否正常。npx swagger-cli validate swagger.json
(本地安裝)或docker run --rm -v $(pwd):/tmp openapitools/openapi-generator-cli validate -i /tmp/swagger.yaml
(Docker)驗證Swagger JSON/YAML文件的合法性;修復語法錯誤(如缺少paths
字段、格式錯誤)。docker pull swaggerapi/swagger-editor
運行本地Swagger Editor,導入Swagger文檔進行在線驗證,快速定位規范問題。swagger-cli validate
命令添加到CI/CD流水線(如Jenkins),在代碼提交時自動驗證Swagger文檔,避免不規范文檔上線。cp swagger.json swagger-$(date +%Y%m%d).json
),防止文檔丟失或損壞。