Spring Tomcat 9连接器如何监听127.0.0.1反向代理才能获胜。带有私有服务器名的Apache 2.4
我希望Tomcat8080只在127.0.0.1上侦听,并反向代理到使用专用网络服务器名的WindowsApache2.4 我不希望tomcat端口8080可以在运行tomcat的机器之外访问 部署的Tomcat web应用程序是一个带有Spring安全登录页的Spring MVC web应用程序 我尝试了以下链接、问题和apache文档中的简单设置: 所发生的事情是-似乎反向代理或tomcat连接器正在重定向客户端 浏览器到HTTP localhost/acme-而不是向前置代理apache服务器提供来自HTTP localhost:8080/acme的数据 客户端浏览器应在以下URL上获取/显示数据:https my.server.domain/acme 我希望流程是: 用户客户端->https apache->http tomcat http->https apache->用户客户端 apache和tomcat与jdk8生活在同一台Windows7服务器上 我没有在任何日志中看到任何有用或错误 我认为tomcat只在127.0.0.1上正确地侦听-但是当apache反向代理发生时, 它从tomcat获取数据,然后出于某种原因,它使客户端的浏览器与网络机器分离 请直接联系: HTTP localhost/acme,而不是让客户端浏览器URL保持在:https my.server.domain/acme 注意,它没有使客户端浏览器尝试转到8080,所以这很好 客户机肯定不是在其指向的URL HTTP localhost/acme上托管自己的Web应用程序,因此客户机浏览器显示: HTTP错误404。找不到请求的资源 我不认为SpringMVC安全登录页面是罪魁祸首 我的apachehttpd.conf有以下行:ServerName My.server.domain:80 我认为我无法更改该值,因为我的SSL证书公用名和SAN基于该专用网络名,所以我需要它保持该状态 使SSL连接有效 我在下面使用重写来要求SSL,但我认为这不是问题所在 通过执行以下操作,我可以使代理/反向代理和https正常工作,而无需达到阻止8080的全部目标: apache httpd.conf:Spring Tomcat 9连接器如何监听127.0.0.1反向代理才能获胜。带有私有服务器名的Apache 2.4,spring,apache,tomcat,ssl,proxy,Spring,Apache,Tomcat,Ssl,Proxy,我希望Tomcat8080只在127.0.0.1上侦听,并反向代理到使用专用网络服务器名的WindowsApache2.4 我不希望tomcat端口8080可以在运行tomcat的机器之外访问 部署的Tomcat web应用程序是一个带有Spring安全登录页的Spring MVC web应用程序 我尝试了以下链接、问题和apache文档中的简单设置: 所发生的事情是-似乎反向代理或tomcat连接器正在重定向客户端 浏览器到HTTP localhost/acme-而不是向前置代理apache服
ProxyPass /acme http://my.server.domain:8080/acme
ProxyPassReverse /acme http://my.server.domain:8080/acme
tomcat server.xml:注意:不只是监听127.0.0.1
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyPort="80" />
<Connector
port="8009"
protocol="AJP/1.3"
redirectPort="8443" />
apache httpd-vhosts.conf
apache httpd-ssl.conf
我设置路径:服务器证书、私钥、CA证书
tomcat server.xml
==============================================
当然我也可以使用Ms Windows IP过滤来阻止8080,我希望这个连接器地址也能正常工作我找到了解决方案:
在我的Tomcat server.xml中,我需要编辑http连接器并添加附加属性:
proxyName="my.server.domain"
因此,它似乎是:
<Connector
port="8080"
address="127.0.0.1"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyPort="80"
proxyName="my.server.domain"
/>
Apache正在向tomcat发送请求中包含localhost的url。
Tomcat连接器响应必须指定应返回给客户端的Apache的真实proxyName而不是localhost
=========================================
Tomcat连接器文档:
*代理名称
如果此连接器正在代理配置中使用,请配置此属性以指定调用request.getServerName时要返回的服务器名称。有关更多信息,请参阅代理支持
代理支持
当Tomcat在代理服务器后面运行时,可以使用proxyName和proxyPort属性。这些属性修改返回给调用request.getServerName和request.getServerPort方法的web应用程序的值,这些方法通常用于构造重定向的绝对URL。如果不配置这些属性,返回的值将反映从代理服务器接收连接的服务器名称和端口,而不是客户端将原始请求定向到的服务器名称和端口*
============================================
很多在线博客都提到如何使tomcat连接器只在127.0.0.1上侦听,但没有解释如果您有
像SpringMVC这样的webapp正在构建url,您正在使用ApacheModProxy将localhost的请求url发送到Tomcat
<!-- Note: proxyPort="80" I think is correct right? (from docs) -->
<Connector
address="127.0.0.1"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyPort="80" />
<Connector
address="127.0.0.1"
port="8009"
protocol="AJP/1.3"
redirectPort="8443" />
proxyName="my.server.domain"
<Connector
port="8080"
address="127.0.0.1"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyPort="80"
proxyName="my.server.domain"
/>
ProxyPass /acme http://localhost:8080/acme
ProxyPassReverse /acme http://localhost:8080/acme