【发布时间】:2018-12-03 03:16:48
【问题描述】:
我在作为 kubernetes pod 运行的 docker 容器中运行 spring boot 微服务。
spring boot 应用在本地运行时,swagger UI 运行良好。
当部署到我们的 kubernetes 集群中时,我们在它前面使用 nginx,它将请求代理到 pod。
我正在努力弄清楚如何让 swagger UI 与 nginx 一起工作。
到目前为止我尝试过的事情
在我的“ssl.conf”中,我尝试添加以下内容;
location ~ ^/(webjars.*) {
rewrite ^/(.*)$ /$1 break;
proxy_pass https://gw-test-request:443;
}
location ~ ^/(gw.*) {
rewrite ^/(.*)$ /swagger-ui.html break;
proxy_pass https://$1:443;
}
请注意,第二个位置的前缀是我们如何使用前缀 gw 命名微服务模块。
这样,当我输入 https:///gw-test 时,它会尝试加载 swagger,但随后会静默失败。当我观察到通过的网络请求时,它不会加载我在本地尝试时所做的所有事情。
我在本地工作时看到的网络调用;
我在nginx后面看到的网络调用;
任何帮助将不胜感激。
** 编辑 **
最后一张截图显示的 404s 原来是 200s 但仍然没有加载 swagger UI。
** 编辑 **
正在使用的swagger配置;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
ApiInfo apiInfo = new ApiInfo(
"<>",
"<>",
"<>",
"<>",
new Contact("<>", "<>", "<>"),
"N/A",
"N/A",
new ArrayList<>());
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("<rest controller base package>"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo);
}
}
【问题讨论】:
-
你能检查一下你的swagger配置的方案是否允许https吗?可能它在本地进行正常的 http 调用,但它不允许通过 https 调用......如果允许 https,请检查方案。
-
@Ogbe 感谢您的评论。让我快速浏览一下并回复您。
-
@Ogbe 我已经用正在使用的 swagger 配置更新了这个问题。我不确定我应该在哪里检查该计划。
-
.protocols(newHashSet("http", "https"));只需添加协议属性以包含协议属性,就像我在上面所做的那样,如果它有效,请告诉我,以便我可以将其添加为答案。
-
@Ogbe 成功了。谢谢你。请务必将其作为答案,我会接受。
标签: spring-boot nginx swagger-ui