在为多个tomcat站点配置apache Web服务器时,我遇到了一个问题。
这是我的要求:
1. Apache webserver - 单实例
2.跨3个不同的多个tomcat实例的相同应用程序(WebApps)
前端服务器和应用服务器全部托管在单个服务器(Solaris)上
当我访问具有特定站点名称的Apache服务器时,它应该只从该tomcat站点获取应用程序
我在google上浏览不同的网站时尝试了各种选项但很遗憾没有任何选项可以解决此问题。
我在vhost conf文件中的当前修改以及app服务器上的workers.properties(Apache Server)和server.xml如下所示。
<VirtualHost x.x.x.x:80>
ServerAdmin webmaster@xxx.com
DocumentRoot /opt/htdocs/test-1.xxx.com/docs
ServerName x.x.x.x
ServerAlias test1-1.xxx.com
:
:
:
</VirtualHost>
<VirtualHost x.x.x.x:80>
ServerAdmin webmaster@xxx.com
DocumentRoot /opt/htdocs/test-2.xxx.com/docs
ServerName x.x.x.x
ServerAlias test1-2.xxx.com
:
:
:
</VirtualHost>
<VirtualHost x.x.x.x:80>
ServerAdmin webmaster@xxx.com
DocumentRoot /opt/htdocs/test-3.xxx.com/docs
ServerName x.x.x.x
ServerAlias test1-3.xxx.com
:
:
:
</VirtualHost>
Worker.properties
worker.list=tomcat1,tomcat2,tomcat3
worker.tomcat1.type=ajp13
worker.tomcat1.host=test1-1.xxx.com
worker.tomcat1.port=8009
worker.tomcat2.type=ajp13
worker.tomcat2.host=test1-2.xxx.com
worker.tomcat2.port=48009
worker.tomcat3.type=ajp13
worker.tomcat3.host=test1-3.xxx.com
worker.tomcat3.port=58009
Server.xml - 每个实例的端口号都不同,如workers.properties中所述。这是我在server.xml中的每个tomcat实例上修改的内容 就主机名而言。 请假设所有3个tomcat实例的所有端口号都不同
Tomcat的1
<Engine name="Catalina" defaultHost="test1-1.com" jvmRoute="tomcat1">
<Host name="test1-1.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Engine name="Catalina" defaultHost="test1-2.com" jvmRoute="tomcat2">
<Host name="test1-2.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Engine name="Catalina" defaultHost="test1-3.com" jvmRoute="tomcat3">
<Host name="test1-3.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
问题在于,每当我启动任何tomcat站点时,每次从第一台tomcat服务器(即test1-1.com)获取webapp
e.g。 如果我打开http://test1- 2 / home / index,那么虽然该网站正在打开,但它正在从“test1-1.com”网站获取webapps目录..
我的要求是 - 当我打开http://test1- 2 / home / index时,它应该选择托管在tomcat site-2上的webapps即test1-2.com
请让我知道,我在这里做错了什么..如果您需要更多信息,请随时问我
不幸的是我无法使用mod_jk模块,因为所有3个tomcat实例的所有webapps目录结构都是相同的 - 所以模式匹配是不可能的
提前致谢
答案 0 :(得分:0)
最后,我能够通过多个服务器上的大量更改完成此任务。 实际上上面的配置是正确的,除了vhost配置文件中缺少'NameVirtualHost'标签,以及它从中获取内容的CMS上的一些配置..
- 干杯 -
答案 1 :(得分:0)
您的虚拟主机配置缺少 JKMount 选项来告诉 apache 应该使用哪个 worker 来提供内容:https://tomcat.apache.org/tomcat-3.3-doc/mod_jk-howto.html
您也可以使用 apache ProxyPass 来达到几乎相同的结果。在您的情况下,jkmount 是更好的选择,因为如果您有多个 tomcat 为同一个应用程序提供服务,则更容易创建配置来负载平衡流量并保证 HA。
关于 apache 配置,我建议您如下:
<VirtualHost x.x.x.x:80>
更改为 <VirtualHost *:80>
,以便 apache 侦听任何接口,端口 80。(告诉 apache 使用 nameBased VirtualHost 而不是 ipBased)ServerName x.x.x.x
在每个虚拟主机中都是一样的:这不起作用。 ServerName 和 ServerAlias 在您的配置中应该是唯一的,或者,如果我没记错的话,apache 读取的第一个将匹配,其他将被忽略。