spring-boot - Spring Boot swagger UI 在 nginx 代理后面不起作用
问题描述
我在作为 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。
** 编辑 **
正在使用的招摇配置;
@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
在您的招摇配置中,添加以下行
.protocols(newHashSet("http", "https"));
这应该可以解决您的问题。
推荐阅读
- pandas - 使用 pandas 创建一个新列以获取不同货币的卢比换算值
- javascript - 播放 blob 视频文件
- ocaml - 如何使用一些默认实现在 OCaml 中实现模块签名?
- javascript - 如何从 chome.tabs.captureVisibleTab 获取屏幕截图
- angular - Material datePicker(Angular)中的多个日期选择
- jenkins - Jenkins Pipeline-如何使用发布插件?
- c# - 在 C# 中使用字符串参数调用 Fortran DLL
- amazon-web-services - AWS Lambda NodeJS 启动 EMR Spark 问题
- c++ - UE4:通过 C++ 或蓝图添加时组件的不同细节面板
- spring - 如何立即停止 Spring Cloud Data Flow 中的作业