【问题标题】:Configure Apache mod_jk AJP connectors to point to tomcat apps on 2 different ports配置 Apache mod_jk AJP 连接器以指向 2 个不同端口上的 tomcat 应用程序
【发布时间】:2017-07-07 15:43:10
【问题描述】:

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

所以目前它适用于一个应用程序

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 应用程序吗?如果是这样,谁能指出我的配置哪里出错了?我假设我在某个地方走错了方向,而不是需要稍作调整?

【问题讨论】:

    标签: apache tomcat mod-jk


    【解决方案1】:

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

    但这里的问题主要是您的配置不起作用,我想是因为我认为(或者至少我从未见过它以这种方式工作)您配置指令的方式JkMount /localhost:80 worker1 确实不行。正如您所猜测的,我很确定在您的第一个配置中唯一有效的规则是 JkMount /* worker1

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

    <VirtualHost *:80>
        servername prod.LOCALSERVERNAME
        DocumentRoot "E:/Production/Apache/htdocs"
        <Directory "E:/Production/Apache/htdocs"> 
            Options +FollowSymLinks
            AllowOverride All
        </Directory>
    
        JkOptions     +ForwardURICompatUnparsed
        ProxyRequests off
        JkMount /* worker1
    </VirtualHost>
    
    
    <VirtualHost *:80>
        servername dummy.LOCALSERVERNAME
        DocumentRoot "E:/Production/Apache/dummy"
    
        JkOptions     +ForwardURICompatUnparsed
        ProxyRequests off
        JkMount /* worker2
    </VirtualHost>
    

    【讨论】:

    • 感谢您给我一些时间,我已经暂时转移到其他地方,因此可能需要几个星期才能检查出来!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2016-12-23
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多