配置Apache mod_jk AJP连接器以指向2个不同端口上的tomcat应用程序

时间:2017-07-07 15:43:11

标签: apache tomcat mod-jk

我正在尝试配置我的(内部)测试服务器以运行2个tomcat应用程序(实际上是同一个并排的两个版本)。我们正在使用Apache2.4和mod_jk& Tomcat8。目前我正在尝试向下工作,所以我尝试的第一步是让当前(嵌入式)tomcat应用程序继续在端口80上正常运行,并且最初无法在端口81上运行不存在的应用程序。 / p>

所以目前它适用于

上的一个应用程序
http://LOCALSERVERNAME

我的更改在

上有效(相同的应用)
   1) http://LOCALSERVERNAME

   2) http://LOCALSERVERNAME:81

但我希望它继续按原样1运行并为2运行不同的应用程序。

所以我修改了httpd.conf以侦听两个端口

Listen 80
Listen 81

使用现有的jkMount设置

JkMount /* worker1
JkMount /localhost:80 worker1
JkMount /localhost:80/* worker1
JkMount /127.0.0.1:80 worker1
JkMount /127.0.0.1:80/* worker1

在两个端口(而不是其他端口)上打开tomcat应用程序,以便侦听器指令正常工作。我认为这只是使用JkMount / * worker1。

我在此期间通过评论并同时尝试以下两个选项(单独)来修改此内容

#JkMount /* worker1
#JkMount /*:80/* worker1
JkMount /194.66.181.17:80/* worker1

我已将servername条目设置为本地服务器名称

ServerName LOCALSERVERNAME

这给了我一个需要身份验证的登录弹出窗口&尽管apache服务器上没有密码保护,但仍会出现401错误。我假设这是配置中的错误。

我已经从我继承的那个修改了worker.properties并且浏览了一个解决方案,我想我可能误解了它的目的。它使用了一个平衡器(具有与所述相同的版本)并且我修改它认为我将使用它来为不同端口(8009& 8011)提供tomcat应用程序。我见过有人说worker.properties文件只是用作负载均衡器,所以这可能是个错误吗?

worker.list=worker1, worker2

worker.worker1.port=8009 
worker.worker1.host=localhost 
worker.worker1.type=ajp13

worker.worker2.port=8011 
worker.worker2.host=localhost 
worker.worker2.type=ajp13

我的httpd-vhosts.conf文件看起来像这样,虽然我已经在第二个条目中尝试了很多东西但我认为它们没有被拿起 - 我认为我最接近它的工作是港口80& 81已经运行到(相同的)现有应用程序,可能只是使用了第一个条目。

<VirtualHost [IP-address]:80 localhost:80>
    servername LOCALSERVERNAME
    DocumentRoot "E:/Production/Apache/htdocs"
    <Directory "E:/Production/Apache/htdocs"> 
        Options +FollowSymLinks
        AllowOverride All
    </Directory>

    JkOptions     +ForwardURICompatUnparsed
    ProxyRequests off
    JkMount /* worker1
</VirtualHost>


<VirtualHost [IP-address]:81>
    servername LOCALSERVERNAME
    DocumentRoot "E:/Production/Apache/dummy"
</VirtualHost>

所以...我的问题是我可以在本地域服务器上使用apache使用mod_jk运行2个嵌入式tomcat应用程序吗?如果是这样,任何人都可以指出我的配置出错的地方?我假设我在某个地方走错了路而不是需要进行小调整?

1 个答案:

答案 0 :(得分:0)

我宁愿在同一个80端口使用两个虚拟主机,即使只是出于概念原因。

但这里的问题主要是你的配置不起作用,我想是因为我认为(或者至少我从来没有看到它以这种方式工作)你配置指令的方式{{ 1}}不起作用。正如您所猜测的那样,我非常确定您的第一个配置中唯一有一条规则是JkMount /localhost:80 worker1

所以我的选择是创建两个基于名称的虚拟主机,并将JkMounts内部设置为每个,或多或少这样:

JkMount /* worker1