【问题标题】:Spring boot swagger UI not working behind an nginx proxySpring Boot swagger UI 在 nginx 代理后面不起作用
【发布时间】: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


【解决方案1】:

这通常发生在您的 swagger 配置中的安全协议未配置为允许 https 时,默认协议仅允许 http 连接,因此您必须明确设置协议以包含 https

在你的招摇配置中,添加以下行

.protocols(newHashSet("http", "https"));

这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2017-08-27
    • 2021-01-03
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多