一尘不染

Apache + Tomcat:使用mod_proxy代替AJP

tomcat

有什么方法可以使用HTTP代理将Apache连接到Tomcat,从而使Tomcat获得正确的传入主机名而不是localhost?我在apache中使用此指令:

ProxyPass /path http://localhost:8080/path

但是它是作为本地主机通过的,当我们在同一服务器上有很多站点时,这是没有用的。我可以在服务器配置中手动设置主机:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           proxyName="pretend.host" proxyPort="80" />

但这又一次不只为一个站点提供服务。而且我不喜欢为每个站点使用不同的内部端口的想法,这听起来很丑陋。

代理时无法转移端口吗?

(如果您问为什么我不仅仅使用AJP,答案就是这个错误。在完全弃Tomcat和Apache之前,我会尽一切努力)


阅读 492

收藏
2020-06-16

共1个答案

一尘不染

您正在寻找的设置是:

<VirtualHost *:80>
  ServerName public.server.name

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
</VirtualHost>

请注意,我们使用localhost作为代理目标。因为启用了ProxyPreserveHost,所以我们可以这样做。该文件指出

它在特殊的配置(例如基于质量的代理虚拟主机)中非常有用,其中原始Host标头需要后端服务器评估。

听起来就像您在做什么。

2020-06-16