Proxy 后面的 SpringBoot 适用于 Undertow,但不适用于 Tomcat

Posted

技术标签:

【中文标题】Proxy 后面的 SpringBoot 适用于 Undertow,但不适用于 Tomcat【英文标题】:SpringBoot behind Proxy works with Undertow but not with Tomcat 【发布时间】:2018-05-21 07:19:06 【问题描述】:

我在代理后面使用 SpringBoot 构建了一个授权服务(目前是 Apache,稍后将是 nginx)。 该服务处理身份验证(委托给 google、facebook 等)并发出 JWT 作为回报。

问题:以tomcat为容器,认证成功后重定向到http://example.com。有了undertow,一切都很好(https://example.com)

我已经在 Apache 中设置了

ProxyPass /auth http://localhost:8080/auth
ProxyPassReverse /auth http://localhost:8080/auth

RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On

在springboot应用中(application.yaml)

server:
  use-forward-headers: true

知道我可以做些什么来使它也可以与 tomcat 一起使用吗? 您可以找到完整的代码(application.yml 除外,因为它目前包含 oauth 机密)on github。

提前感谢您的任何想法!

【问题讨论】:

【参考方案1】:

Spring Boot 中嵌入的 Tomcat 容器不支持开箱即用的转发标头。见https://github.com/spring-projects/spring-boot/issues/6232。我在这方面浪费了很多时间。

【讨论】:

以上是关于Proxy 后面的 SpringBoot 适用于 Undertow,但不适用于 Tomcat的主要内容,如果未能解决你的问题,请参考以下文章

Charles SSL Proxy 适用于 chrome 但不适用于应用程序

仅适用于某些域的代理

★推荐一款适用于SpringBoot项目的轻量级HTTP客户端框架

在反向代理后面使用 OAuth2 的 Spring Boot

SpringBoot中使用redis实现相对可靠的分布式定时任务,适用于订单场景

SpringBoot中使用redis实现相对可靠的分布式定时任务,适用于订单场景