Java应用通过nginx代理后可访问swagger页面,当nginx代理端口为非80端口时,swagger页面的/v2/api-docs接口返回的host属性默认只有ip而没有端口,
而直接访问web应用host属性是有端口信息的,在swagger页面调试时也就没有端口,返回"TypeError:Failed to fetch",所以问题就出现在/v2/api-docs接口返回host无端口的问题
跟踪swagger源码:
Swagger2Controller.getDocumentation
HostNameProvider.componentsFrom
UriComponentsBuilder.fromHttpRequest
UriComponentsBuilder.adaptFromForwardedHeaders
从源码里看,当前的情况肯定设置Port为null了,从源码中的规则添加下面header属性满足其规则,nginx再重启即可。
proxy_set_header Forwarded host=$host:$server_port;
或
proxy_set_heade