程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Apache代理后面具有嵌入式Tomcat的Spring Boot大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在Apache代理后面具有嵌入式tomcat的Spring Boot?

开发过程中遇到在Apache代理后面具有嵌入式tomcat的Spring Boot的问题如何解决?下面主要结合日常开发的经验,给出你关于在Apache代理后面具有嵌入式tomcat的Spring Boot的解决方法建议,希望对你解决在Apache代理后面具有嵌入式tomcat的Spring Boot有所启发或帮助;

前几天我遇到了同样的问题。在对Spring Boot 1.3进行一些调试之后,我发现了以下解决方案。

您必须在Apache代理上设置标头:

<VirtualHost *:443>
    Servername www.myapp.org
    ProxyPass / http://127.0.0.1:8080/
    requestheader set X-ForWARDed-Proto https
    requestheader set X-ForWARDed-Port 443
    ProxyPreserveHost On
    ... (SSL directives omitted for readability)
</VirtualHost>

您必须告诉Spring Boot应用程序使用这些标头。因此,将以下行放在application.propertIEs中(或Spring Boots可以理解属性的任何其他位置):

server.use-forWARD-headers=true

如果正确执行这两件事,则应用程序发送的每个重定向都 转到http://127.0.0.1:8080/[path],而是会自动转到https://www.myapp.com/[path]

更新1. 有关此主题的文档在此处。您应该至少阅读它,以了解该属性server.tomcat.internal- proxIEs定义了可信任的代理服务器的IP地址范围。

解决方法

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

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

因此,代理服务器的URL正在转发,如下所示:

https://proxyserver:4433/appname   >>forWARD>>   http://appserver:8080/

当运行WITHOUT代理时,发生的第一件事是@H_801_39@ Spring Security重定向请求,例如:

http://appserver:8080/   >>redirect>>   http://appserver:8080/login

以显示登录表单,通过扩展WebSecurityConfigurerAdapter

  ...
  httpSecurity.formLogin().loginPage("/login") ...
  ...

在没有代理的情况下,它可以正常工作,但是在使用代理的情况下,需要更改重定向,@H_801_39@ 因此Spring应该改为重定向到相应的代理URL,例如:

http://appserver:8080/   >>redirect>>   https://proxyserver:4433/appname/login

但还没有成功。

我正在尝试应用此解决方案: 59.8在前端代理服务器后面使用tomcat

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

X-ForWARDed-For: xxx.xxx.xxx.xxx
X-ForWARDed-Host: proxyserver
X-ForWARDed-Port: 4433
X-ForWARDed-Proto: https

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

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”部分。在appserver上,应用程序植根于“@H_801_39@ /”。通过代理时,应如何指示Spring在发送回客户端的所有URL中都包含“ / appname”?

大佬总结

以上是大佬教程为你收集整理的在Apache代理后面具有嵌入式Tomcat的Spring Boot全部内容,希望文章能够帮你解决在Apache代理后面具有嵌入式Tomcat的Spring Boot所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。