在为多个tomcat站点配置apache web服务器时,我遇到了一个问题
这是我的要求:
1.Apache Web服务器-单实例
2.跨3个不同的多个tomcat实例的相同应用程序(WebApps(
前端服务器和应用程序服务器都托管在一台服务器上(Solaris(
当我使用特定的站点名称访问Apache服务器时,它应该只从该tomcat站点中获取应用程序
我在谷歌上浏览不同的网站时尝试了各种选项,但不幸的是,到目前为止没有任何选项解决这个问题。。
我在vhost-conf文件和应用服务器上的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 (上获取网络应用程序时
例如。如果我打开,http://test1-2/home/index尽管网站正在打开,但它正在从"test1-1/com"网站中获取webapps目录。。
我的要求是-当我打开http://test1-2/home/index,它应该选择托管在tomcat site-2上的网络应用程序,即test1-2.com
请告诉我,我在这里做什么不对。。如果你需要更多信息,请随时问我
不幸的是,我不能使用mod_jk模块,因为我所有的webapps目录结构在所有3个tomcat实例中都是相同的,所以模式匹配是不可能的
提前感谢
最后,我能够在多个服务器上完成大量更改,从而完成这项任务。实际上,上面的配置是正确的,只是vhost-config文件中缺少"NameVirtualHost"标记,CMS上的一些配置是从中获取内容的。。
--干杯——
您的虚拟主机配置缺少JKMount选项,该选项告诉apache应该使用哪个工作进程来提供内容:https://tomcat.apache.org/tomcat-3.3-doc/mod_jk-howto.html
您也可以使用apacheProxyPass来实现几乎相同的结果。在您的情况下,jkmount是一个更好的选择,因为如果您有多个tomcat为同一应用程序提供服务,则更容易创建一个配置来负载平衡流量并保证HA。
关于apache配置,我建议您如下:
- 将
<VirtualHost x.x.x.x:80>
更改为<VirtualHost *:80>
,使apache在端口80的任何接口上侦听。(告诉apache使用基于名称的VirtualHost,而不是基于ipBased( - 我看到您的
ServerName x.x.x.x
在每个虚拟主机中都是一样的:这不起作用。ServerName和ServerAlias在您的配置中应该是唯一的,或者,如果我没有记错的话,apache读取的第一个将匹配,其他将被忽略