首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Apache代理后面嵌入Tomcat的Spring Boot

在Apache代理后面嵌入Tomcat的Spring Boot
EN

Stack Overflow用户
提问于 2014-08-23 05:45:01
回答 7查看 54K关注 0票数 36

我们有一个Spring Boot (Spring MVC)应用程序,在Apache SSL代理后面的专用应用程序服务器上嵌入了Tomcat。

代理服务器上的SSL端口是4433,转发到应用程序服务器上的端口8080。

因此,指向代理服务器的URL转发方式如下:

代码语言:javascript
复制
https://proxyserver:4433/appname   >>forward>>   http://appserver:8080/

在没有代理的情况下运行时,发生的第一件事是

Spring Security重定向请求,如下所示:

代码语言:javascript
复制
http://appserver:8080/   >>redirect>>   http://appserver:8080/login

要显示登录表单,请将WebSecurityConfigurerAdapter扩展为

代码语言:javascript
复制
  ...
  httpSecurity.formLogin().loginPage("/login") ...
  ...

它在没有代理的情况下工作得很好,但是有了代理,重定向需要改变,

因此Spring应该重定向到相应的代理URL,如下所示:

代码语言:javascript
复制
http://appserver:8080/   >>redirect>>   https://proxyserver:4433/appname/login

但目前还没有成功。

我正在尝试应用这个解决方案:59.8 Use Tomcat behind a front-end proxy server

我们已经在Apache中配置了,并验证它是否发送了预期的报头:

代码语言:javascript
复制
X-Forwarded-For: xxx.xxx.xxx.xxx
X-Forwarded-Host: proxyserver
X-Forwarded-Port: 4433
X-Forwarded-Proto: https

使用以下参数启动应用程序:

代码语言:javascript
复制
export ARG1='-Dserver.tomcat.protocol-header=x-forwarded-proto' 
export ARG2='-Dserver.tomcat.remote-ip-header=x-forwarded-for'
java $ARG1 $ARG2 -jar webapp.jar

但是,重定向仍然不起作用。

它将一直在本地重定向到客户端不可用的http://appserver:8080/login

为了让这个场景工作,我们还需要做什么吗?

更新

此外,我还关心代理URL中的"/appname“部分。在应用程序服务器上,应用程序的根目录为"/“。在通过代理时,应该如何指示Spring将"/appname“包含在发送回客户端的所有URL中?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25455969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档