Apache 2.4 Proxy AJP使用Tomcat 8为多个域提供服务

时间:2015-10-31 23:07:36

标签: apache tomcat configuration proxy ajp

我开发了三个基于Spring的Web应用程序部署在我的Tomcat 8服务器上。我可以通过以下方式访问LAN:

http://localhost:8080/webapps1
http://localhost:8080/webapps2
http://localhost:8080/webapps3

对我来说很好。

Tomcat AJP连接器配置为:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

现在,我尝试通过AJP连接器使用apache 2.4 proxy configure将所有三个应用程序发布到Internet中

我还注册了三个FQDN,如:

www.thss.domain1.com.au
www.stoa.domain2.com.au
ozssc.stoa.domain2.com.au

我用check-host.net测试了这三个FQDN,它们都运行良好。

现在我将使用代理虚拟主机设置配置我的apache 2.4,将文件名配置为:/ Library / Server / Web / Config / Proxy中的apache-serviceproxy.conf

......
listen 10.0.1.100:80
......
<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName www.thss.domain1.com.au
  ServerAlias thss.domain1.com.au
  ServerAdmin admin@domain1.com.au
  ProxyPass / ajp://127.0.0.1:8009/webapps1/
  ProxyPassReverse / ajp://127.0.0.1:8009/webapps1/
</VirtualHost>
<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName www.stoa.domain2.com.au
  ServerAlias stoa.domain2.com.au
  ServerAdmin admin@domain1.com.au
  ProxyPass / ajp://127.0.0.1:8009/webapps2/
  ProxyPassReverse / ajp://127.0.0.1:8009/webapps2/
</VirtualHost>
<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName ozssc.stoa.domain2.com.au
  ServerAdmin admin@domain1.com.au
  ProxyPass / ajp://127.0.0.1:8009/webapps3/
  ProxyPassReverse / ajp://127.0.0.1:8009/webapps3/
</VirtualHost>

请注意,FQDN 2和3在同一个域(domain2.com.au)工作,FQDN 1在其他域工作(domain1.com.au)

我通过使用net renderer.com在网上测试,FQDN 1 www.thss.domain1.com.au工作得很漂亮,但是FQDN 2和3工作不正常,我查看我的tomcat访问日志我发现有些东西是非常有趣。

详情为:

当我从Internet访问我的第一个FQDN(www.thss.domain1.com.au)时,请求通过:路由器 - &gt; Apache 2.4(端口80) - &gt; AJP连接器(8009) - &gt; Tomcat 8.0.28成功,所有页面都运行良好。

Tomcat访问日志显示:

58.106.1.75 - - [01/Nov/2015:09:37:40 +1100] "GET /webapps1/ HTTP/1.1" 200 2616
58.106.1.75 - - [01/Nov/2015:09:37:40 +1100] "GET /webapps1/css/thss_layout.css HTTP/1.1" 200 1405
58.106.1.75 - - [01/Nov/2015:09:37:40 +1100] "GET /webapps1/js/dojo-release-1.8.6/dojo/dojo.js HTTP/1.1" 200 158637

这样的方式,html请求,包含css / js文件请求全部使用单个上下文路径/ webapps1,这是完美的。

但是当我申请我的FQDN 2(www.stoa.domain2.com.au)和3(ozssc.stoa.domain2.com.au)时,它只会首先请求正确的上下文路径,例如:/ webapps2 any包含css和js或图像文件的下一个请求是双上下文路径,例如:/ webapps2 / webapps2,因为它没有很好的格式化上下文路径,Tomcat响应404错误。结果:所有FQDN 2和3页都支持css / js / image,只显示一些纯文本。

访问日志显示:

148.251.45.185 - - [01/Nov/2015:08:58:59 +1100] "GET /webapps2/ HTTP/1.1" 200 19098
148.251.45.185 - - [01/Nov/2015:08:59:00 +1100] "GET /webapps2/webapps2/dojo-release-1.10.4/dijit/themes/claro/claro.css HTTP/1.1" 404 1158
148.251.45.185 - - [01/Nov/2015:08:59:01 +1100] "GET /webapps2/webapps2/css/style.css HTTP/1.1" 404 1088
148.251.45.185 - - [01/Nov/2015:08:59:02 +1100] "GET /webapps2/webapps2/images/icons/search33.png HTTP/1.1" 404 1112

我的问题是:如何使用AJP配置我的代理,而不是通过AJP连接器将请求从apache 2.4添加到tomcat之前的重复上下文路径?

欢迎任何建议!

周末愉快!伴侣

1 个答案:

答案 0 :(得分:0)

不要在ProxyPass指令中更改上下文路径。当你这样做时,有许多方法可以用脚射击自己。

猜测,您网页上的链接是绝对的,因此它们包含上下文路径。当客户端请求这些时,ProxyPass指令再次添加上下文路径。

最简单的解决方案是将Tomcat配置为虚拟主机,并将每个应用程序作为ROOT Web应用程序部署在自己的虚拟主机中。