Пользовательский интерфейс Spring boot swagger не работает за прокси-сервером nginx - PullRequest
0 голосов
/ 24 июня 2018

Я использую пружинную загрузочную микросервису в моем док-контейнере, работающем как стручок кубернетеса.

Интерфейс swagger работает нормально, когда приложение весенней загрузки запускается локально.

При развертывании в нашем кластере kubernetes мы обращаемся к нему с помощью nginx, который передает запросы к модулю.

Я изо всех сил пытаюсь выяснить, как заставить пользовательский интерфейс Swagger работать с 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.

С этим, этопытается загрузить swagger, когда я вхожу в https: /// gw-test, но затем молча терпит неудачу.Он не загружает все, что делает, когда я пытался локально, поскольку я наблюдал за сетевыми запросами, которые проходят.

Сетевые вызовы, которые я вижу, когда он работает локально;

enter image description here

Сетевые вызовы, которые я вижу, когда он находится за nginx;

enter image description here

Любая помощь будет принята с благодарностью.

** Edit **

404, отображаемые на последнем скриншоте, оказались 200s, но все равно не загружает пользовательский интерфейс.

** Edit **

Используемая конфигурация чванства;

@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 голосов
/ 29 июня 2018

Это обычно происходит, когда протокол безопасности в вашей конфигурации сваггера не настроен для разрешения https, протокол по умолчанию разрешает только http-соединения, поэтому вы должны явно настроить протокол на включение https

В вашей конфигурации сваггера,добавьте следующие строки

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

Это должно решить вашу проблему.

...