我开发了三个基于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之前的重复上下文路径?
欢迎任何建议!
周末愉快!伴侣
答案 0 :(得分:0)
不要在ProxyPass指令中更改上下文路径。当你这样做时,有许多方法可以用脚射击自己。
猜测,您网页上的链接是绝对的,因此它们包含上下文路径。当客户端请求这些时,ProxyPass指令再次添加上下文路径。
最简单的解决方案是将Tomcat配置为虚拟主机,并将每个应用程序作为ROOT Web应用程序部署在自己的虚拟主机中。