在 CentOS 上部署 Swagger(如 Swagger UI / Springfox / Knife4j / OpenAPI)后“无法访问”,通常不是 Swagger 本身的问题,而是 网络、权限、配置或安全策略 导致。下面按最常见原因 → 排查方法 → 解决办法来说明。
| 原因 | 典型表现 |
|---|---|
| 服务未监听正确端口 | 浏览器一直转圈 / 连接失败 |
| 防火墙未放行端口 | 本机能访问,外部不能 |
| SELinux 限制 | CentOS 特有,外部访问被拦 |
| Swagger 被 Spring Security 拦截 | 返回 401 / 403 |
| 生产环境禁用 Swagger | 访问 404 |
| 路径写错 | 404 Not Found |
| Nginx 反代配置错误 | 502 / 静态资源加载失败 |
ps -ef | grep java
netstat -tunlp | grep 8080
# 或
ss -tunlp | grep 8080
✅ 本机测试:
curl http://127.0.0.1:8080/swagger-ui.html
systemctl status firewalld
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
✅ 验证:
firewall-cmd --list-ports
getenforce
如果是 Enforcing:
setenforce 0 # 临时关闭
✅ 永久关闭(不推荐生产):
vi /etc/selinux/config
SELINUX=disabled
或放行 HTTP 端口:
semanage port -a -t http_port_t -p tcp 8080
如果你用了 Spring Security,必须放行:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(
"/swagger-ui.html",
"/swagger-resources/**",
"/v2/api-docs",
"/v3/api-docs",
"/webjars/**"
).permitAll()
.anyRequest().authenticated();
}
spring:
profiles: prod
@Profile("!prod")
@EnableSwagger2
或:
swagger:
enabled: false
✅ 解决:切换环境或开启配置
| 版本 | 访问地址 |
|---|---|
| Swagger 2 | /swagger-ui.html |
| SpringDoc | /swagger-ui/index.html |
| Knife4j | /doc.html |
示例(正确):
location / {
proxy_pass http://127.0.0.1:8080;
}
Swagger 静态资源需同源。
# 看日志
journalctl -u your-service
# 或
tail -f logs/*.log
浏览器按 F12 → Network,看是:
你可以直接把以下信息发我:
我可以 一步一步给你具体命令。