【问题标题】:Apache Tomcat Configuration - One Apache Server and Multiple Tomcat SitesApache Tomcat 配置 - 一个 Apache 服务器和多个 Tomcat 站点
【发布时间】:2015-07-29 13:49:37
【问题描述】:


在为多个 tomcat 站点配置 apache Web 服务器时,我遇到了一个问题。
这是我的要求:
1. Apache 网络服务器 - 单实例
2. 跨 3 个不同的多个 tomcat 实例的相同应用程序(WebApps)
前端服务器和应用服务器都托管在单个服务器上(Solaris)

当我使用特定站点名称访问 Apache 服务器时,它应该只从该 tomcat 站点获取应用程序

我在浏览 google 上的不同站点时尝试了各种选项,但不幸的是,到目前为止,没有任何选项可以解决此问题..

我在 vhost conf 文件和应用服务器上的 workers.properties (Apache 服务器) 和 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 时

例如 如果我打开http://test1-2/home/index,那么虽然该站点正在打开,但它正在从“test1-1.com”站点获取 webapps 目录。

我的要求是 - 当我打开 http://test1-2/home/index 时,它应该选择托管在 tomcat site-2 即 test1 上的 webapps -2.com

请告诉我,我在这里做错了什么......如果您需要更多信息,请随时问我

不幸的是我不能使用 mod_jk 模块,因为我所有的 webapps 目录结构在所有 3 个 tomcat 实例中都是相同的 - 所以模式匹配是不可能的

提前致谢

【问题讨论】:

  • 考虑使用 nginx 而不是 apache。它更容易配置并且可能更高效。

标签: java apache tomcat


【解决方案1】:

您的虚拟主机配置缺少 JKMount 选项来告诉 apache 应该使用哪个工作人员来提供内容:https://tomcat.apache.org/tomcat-3.3-doc/mod_jk-howto.html

您也可以使用 apache ProxyPass 来实现几乎相同的结果。在您的情况下,jkmount 是更好的选择,因为如果您有多个 tomcat 服务于同一个应用程序,则更容易创建配置来负载平衡流量并保证 HA。

关于 apache 配置,我建议您如下:

  1. &lt;VirtualHost x.x.x.x:80&gt; 更改为&lt;VirtualHost *:80&gt;,这样apache 就可以监听任何接口,端口80。(告诉apache 使用nameBased VirtualHost 而不是ipBased)
  2. 我看到你的ServerName x.x.x.x 在每个虚拟主机中都是一样的:这不起作用。 ServerName 和 ServerAlias 在您的配置中应该是唯一的,或者,如果我没记错的话,apache 读取的第一个将匹配,而其他将被忽略。

【讨论】:

    【解决方案2】:

    最后,我能够通过跨多个服务器的大量更改来完成这项任务。 实际上,上面的配置是正确的,只是 vhost 配置文件中缺少“NameVirtualHost”标签以及 CMS 上从中获取内容的一些配置..

    --干杯--

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 2017-04-19
      • 2016-12-30
      • 1970-01-01
      • 2014-11-09
      • 2011-02-24
      • 2014-07-28
      • 2012-05-05
      相关资源
      最近更新 更多