Spring Boot的Swagger UI在nginx代理后面不起作用

时间:2018-06-24 08:54:35

标签: spring-boot nginx swagger-ui

我正在以kubernetes容器运行的docker容器中运行一个spring boot微服务。

当spring boot应用程序在本地运行时,swagger UI运行良好。

当部署到我们的kubernetes集群中时,我们将在nginx前面将其代理到Pod。

我正在努力弄清楚如何使nginx能够使用醒目的UI。

到目前为止我尝试过的事情

在我的“ 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时,它会尝试加载大张旗鼓,但随后默默失败。当我观察到正在经历的网络请求时,它不会加载我在本地尝试时所做的一切。

我在本地工作时看到的网络呼叫;

enter image description here

当网络电话位于nginx后面时,我会看到它;

enter image description here

任何帮助将不胜感激。

**编辑**

最后一张屏幕截图上显示的404s原来是200s,但仍然没有加载摇摇欲坠的UI。

**编辑**

正在使用的摇头配置;

@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);
}
}

1 个答案:

答案 0 :(得分:1)

通常会在以下情况下发生这种情况:您的昂首阔步配置中的安全协议未配置为允许https,默认协议仅允许http连接,因此您必须明确设置协议以包含https

在大张旗鼓的配置中,添加以下行

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

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