Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Tomcat 9连接器如何监听127.0.0.1反向代理才能获胜。带有私有服务器名的Apache 2.4_Spring_Apache_Tomcat_Ssl_Proxy - Fatal编程技术网

Spring Tomcat 9连接器如何监听127.0.0.1反向代理才能获胜。带有私有服务器名的Apache 2.4

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服

我希望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:

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