今天使用服务器测试springboot+swagger测试接口时,发现一直请求不成功,但是本地访问没问题。于是开始了下面的破案之路:
- 第一反应:服务没起来,但是仔细一想不对(还能访问,怎么能是服务挂了呢)
- 继续追踪:发现页面的crul框中地址不对:curl -X GET "http://abc-api/api/xxx/v1/list,而abc-api不是我的域名,而是项目名,而且的Base URL也是abc-api,所以想到可能是项目中哪里设置了Base URL导致的,但是在项目中找了好久,没有设置Base URL的地方,而且本地启动时Base URL是:localhost:yyyy,所以考虑该值可能不是项目中设置的,而是swagger取的服务host
- 利用搜索引擎搜了一番,还是没有结果,但是从搜索引擎给出的列表中发现了Nginx关键词,联想到我的请求是通过Nginx转发的,马上打开Nginx配置文件,该项目转发配置如下:
upstream abc-api {
server :yyyy;
}
server {
listen 80;
server_name ;
# 访问api接口
location /api {
proxy_pass http://abc-api;
}
# 访问swagger
location / {
proxy_pass http://abc-api;
}
}
可以看到upstream abc-api和Base URL一致,问题应该就是这里了。swagger应该取的这里作为Base URL值,然后尝试把upstream abc-api,改为域名:,对应两个proxy_pass修改为:http:,重启Nginx后, Base URL地址变为域名,而且接口可正常调用。至于根本原因还需要进一步追究。。。