我们有一个带有嵌入式 Tomcat 的 Spring Boot (Spring MVC) 应用,位于 Apache SSL 代理后面的专用应用服务器上。
代理服务器上的SSL端口是4433,转发到appserver上的8080端口。
所以代理服务器的 URL 是这样转发的:
https://proxyserver:4433/appname >>forward>> http://appserver:8080/
在没有代理的情况下运行时,首先发生的是
Spring Security 重定向请求,如:
http://appserver:8080/ >>redirect>> http://appserver:8080/login
显示登录表单,通过扩展 WebSecurityConfigurerAdapter 与
...
httpSecurity.formLogin().loginPage("/login") ...
...
没有代理也可以正常工作,但是使用代理需要更改重定向,
所以 Spring 应该改为重定向到相应的代理 URL,例如:
http://appserver:8080/ >>redirect>> https://proxyserver:4433/appname/login
但还没有成功。
我正在尝试应用此解决方案: 59.8 Use Tomcat behind a front-end proxy server
我们已经配置了mod_proxy在 Apache 中,并验证它发送了预期的 header :
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”部分。在应用服务器上,应用程序 Root 于“/”。当通过代理时,应如何指示 Spring 将“/appname”包含在发送回客户端的所有 URL 中?
最佳答案
前几天我也遇到了同样的问题。在对 Spring Boot 1.3 进行了一些调试后,我找到了以下解决方案。
1.您必须在 Apache 代理上设置 header :
<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>
2. 您必须告诉您的 Spring Boot 应用程序使用这些 header 。所以把下面这行放在你的 application.properties 中(或者 Spring Boots 理解属性的任何其他地方):
server.use-forward-headers=true
如果您正确执行了这两件事,您的应用程序发送的每个重定向将不会转到 http://127.0.0.1:8080/[path]但自动发送到 https://www.myapp.com/[path]
更新 1。 关于这个主题的文档是 here .您至少应该阅读它以了解属性 server.tomcat.internal-proxies,它定义了可信任的代理服务器的 IP 地址范围。
2021 年更新 文档移至 here . Spring Boot 配置现在有点不同了。
关于在 Apache 代理后面嵌入 Tomcat 的 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455969/
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)
有人知道如何将capybarapoltergeist的用户代理覆盖到移动用户代理以进行测试吗?我发现了一些有关为seleniumwebdriver配置它的信息:http://blog.plataformatec.com.br/2011/03/configuring-user-agents-with-capybara-selenium-webdriver/这在capybara闹鬼中怎么可能? 最佳答案 请参阅poltergeistgithub页面上的链接:https://github.com/teampoltergeist/polte
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)
我正在使用Net::FTPruby库连接到FTP服务器并下载文件。一切正常,但现在我需要使用出站代理,因为他们的防火墙将IP地址列入白名单,并且我正在使用Heroku来托管该站点。我正在试用新的Proximo附加组件,它看起来很有前途,但我无法让Net::FTP使用它。我在Net::FTPdocs中看到以下内容:connect(host,port=FTP_PORT)EstablishesanFTPconnectiontohost,optionallyoverridingthedefaultport.IftheenvironmentvariableSOCKS_SERVERisset,
我想使用nokogiri和mechanize自动化一个计时网络客户端。我需要通过代理服务器连接,但问题是,我不知道所述代理服务器的用户名和密码。我想获取存储在计算机上的此代理的缓存凭据..例如,在c#中你可以使用:stringproxyUri=proxy.GetProxy(requests.RequestUri).ToString();requests.UseDefaultCredentials=true;requests.Proxy=newWebProxy(proxyUri,false);requests.Proxy.Credentials=System.Net.Credential
更新:当输入“passenger-memory-stats”时,我显示:---Passengerprocesses---Processes:0我该如何解决这个问题?为什么即使我在httpd.conf中添加它并重新启动apache,passenger也不会启动?我无法让PhusionPassenger在服务器上运行RubyonRails。我已经按照Phusion网站上的所有说明安装了passenger并修改并创建了ApacheVirtualHost以指向新目录并验证所有.conf文件都已成功加载。还加载了httpd-Mpassenger_module。我还在本地主机上成功运行了Passe
我看过几个用Ruby编写HTTP代理的例子,例如thisgistbyTorstenBecker,但我如何扩展它来处理HTTPS,又名“中间人”SSL代理?我正在寻找一个简单的源代码框架,我可以扩展它以满足我自己的日志记录和测试需求。更新我已经在使用Charles,aniftyHTTPSproxyapp类似于Fiddler,它本质上是我想要的,只是它被打包在一个应用程序中。我想自己写一个,因为我对过滤和展示有特定的需求。更新二四处浏览后,我对术语的理解有所好转。我不是在寻找完整的“中间人”SSL代理。相反,它将在我的机器上本地运行,因此我可以接受它提供的任何SSL证书。但是,我需要查看我