项目场景:
提示:这里简述项目相关背景: 项目场景:最近做微信小程序,后台使用springboot框架,以下问题的前提都是如果不使用nginx,那么swagger是可以正常访问的,也可以测试swagger中的服务,但是如果使用nginx转发就不行了
问题一描述:
现象是无法访问服务,也无法访问swagger页面,nginx日志报400或404或405
原因分析:
这是nginx的配置出问题
解决方案:
以下三个解决方案都是修改nginx的配置文件nginx.conf文件的配置 一、先看看自己有没有配置“upstream” 的配置,如果“upstream” 配置之后跟着的名字是包含有“_”下划线的,把下划线去掉,因为部分版本的tomcat不支持带有下划线的配置,例如: upstream xxx { ip_hash; server 127.0.0.1:8088; } 二、location配置的名字前面需要加上 ^~ ,例如: location ^~ /shopping { } 三、加上以下配置(proxy_pass后面跟着服务的ip加端口或者域名,自行修改,“xxx”对应upstream 定义的名字) location ^~ /shopping { root html; index index.html index.htm; proxy_pass http://xxx/; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; if ($request_method = 'OPTIONS') { return 204; } proxy_redirect off; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 2000m; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; }
问题二描述:
经过上面的处理,会惊喜的发现此时的swagger可以访问了,但是扯淡的是如果想要测试swagger中的方法会报错:no response from server 或者 no content
原因分析:
这是springboot配置文件中缺少配置,导致swagger使用工程默认的request地址的原因,正确的方式是在swagger中测试方法,swagger应该调用nginx的地址再有nginx转发,而不是直接调用工程的地址
解决方案:
在springboot工程的application.yml(有的人是application.properties)中增加以下配置: springfox.documentation.swagger.v2.host=localhost/shopping(这里等于号后面的地址就是nginx配置文件中配置的地址,问题一的解决方案中有写到) springfox.documentation.swagger.v2.path=/swagger/api-docs 或者以下格式的配置 springfox: documentation: swagger: v2: host: localhost/shopping
springfox: documentation: swagger: v2: path=/swagger/api-docs
至此工程终于解决了无法通过ngnix访问的问题。耗时一天,实在太蛋疼!
|