SpringDoc/Swagger 在 nginx 代理后面

SpringDoc/Swagger behind an nginx proxy

我们是 运行 nginx 代理背后的服务,因此:

http://service-post:8080/swagger-ui.html 被路由到 public 地址 https://host.com/services/post/swagger-ui.html

或者换一种方式定义:

当 nginx 在 https://host.com/services/post/swagger-ui.html 上收到请求时,它会去除 /services/post/ 前缀并将请求传递给 /swagger-ui.html 路径上的 post 服务。

在设置任何东西之前(使用默认的 SpringDoc 配置)我可以在 http://service-post:8080/swagger-ui.html.

上正确地看到 swagger 文档

要在 host.com 上设置 public 地址的路径,我正在使用:

springdoc.api-docs.path:        /services/post/api-docs
springdoc.swagger-ui.path:      /services/post/swagger-ui.html
springdoc.swagger-ui.configUrl: /services/post/v3/api-docs/swagger-config

然而,这似乎完全阻止了它:

/swagger-ui.html/api-docs/v3/api-docs/swagger-config return 404 service-post:8080/*https://host.com/services/post/*

唯一似乎有效的是 https://host.com/services/post/swagger-ui/index.html,它显示了 petstore 文档。

我们没有使用 Spring Boot,只是 Spring MVC 5.3.1.

那么我该如何设置以保持对原始路径的处理(例如 /api-docs),但在前缀路径(/services/post/api-docs)上执行查找?

全部记录在这里:

如果您没有使用 spring-boot,您可以添加 ForwardedHeaderFilter bean:

最后我完全忽略了默认重定向:

  • swagger-ui.html -> `swagger-ui/index.html?url=/v3/api-docs

并实现了我自己的一个:

  • docs -> swagger-ui/index.html?url=MY_PREFIX/v3/api-docs

这样我不需要更改任何东西,一切都使用默认设置。