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