Apache 没有在正确的虚拟主机上路由到 tomcat

Apache 没有在正确的虚拟主机上路由到 tomcat

我们正在考虑从 Websphere 迁移到 Tomcat。我正尝试根据 apache web 服务器中的虚拟主机指令将流量从 apache web 服务器发送到 tomcat。

经过一番尝试,我终于让它工作了,但我注意到,如果我在 apache 中的第一个 VirtualHost 中有一个 JKMount 指令,则所有 virtualHosts 都会发送到应用程序服务器。如果我在配置中的 Virtual hosts 中进一步添加了 JKMount,那么只有该 VirtualHost 可以处理请求。

例如,以下配置是我的症状

mysite.com/Webapp1/ --> 我解析到正确的应用程序 mysite2.com/Webapp1/ --> 我解析到正确的应用程序(不好!) mysite.com/MonitorApp/ --> 我解析到正确的应用程序 mysite2.com/MonitorApp/ --> 我解析到正确的应用程序(不好!) mysite.com/Webapp2/ --> 我没有进入应用程序(好) mysite2.com/Webapp2/ --> 我解析到正确的应用程序

以下是我的网络服务器虚拟主机的样子。

<VirtualHost 255.255.255.1:80>
    ServerName mysite.com
    ServerAlias aliasmysite.ca
##all our rewrite rules
JkMount /Webapp1/* LoadBalanceWorker
JKmount /MonitorApp/* LoadBalanceWorker
</VirtualHost>


<VirtualHost 255.255.255.2:80>
    ServerName mysite2.com
    ServerAlias aliasmysite2.ca
##all our rewrite rules
JkMount /Webapp2/* LoadBalanceWorker
</VirtualHost>

我们在 Solaris10 上运行 apache webserver 2.2.10 和 tomcat 7.0.29

我在这里发布了我们的建筑图片。https://i.stack.imgur.com/WqDfb.jpg

我没有在 Tomcat 上定义 VirtualHosts。根据我所读的内容,我的理解是,只有当我直接访问 Tomcat 时才需要它。

任何帮助都将不胜感激。

编辑

这是我的worker.properties。

worker.list= LoadBalanceWorker,App1,App2

worker.intApp1.port=8009
worker.intApp1.host=10.15.8.8
worker.intApp1.type=ajp13
worker.intApp1.lbfactor=1
worker.intApp1.socket_timeout=30
worker.intApp1.socket_connect_timeout=5000
worker.intApp1.fail_on_status=302,500,503
worker.intApp1.recover_time=30

worker.intApp2.port=8009
worker.intApp2.host=10.15.8.9
worker.intApp2.type=ajp13
worker.intApp2.lbfactor=1
worker.intApp2.socket_timeout=30
worker.intApp2.socket_connect_timeout=5000
worker.intApp2.fail_on_status=302,500,503
worker.intApp2.recover_time=30

worker.LoadBalanceWorker.type=lb
worker.LoadBalanceWorker.balanced_workers=intApp1,intApp2
worker.LoadBalanceWorker.sticky_session=1

答案1

Apache 中的每个虚拟主机都使用 ServerName 和 ServerAlias“捕获”请求。然后其他虚拟主机不会处理该请求。因此,根据您的配置:

  • 带有 mysite.com 或 aliasmysite.ca 主机头的请求将只能访问 URI:/Webapp1/* 和 /MonitorApp/*。

  • 类似地,带有 mysite2.com 或 aliasmysite2.ca 主机头的请求将只能访问 URI /Webapp2/*。

根据您对症状的描述(并不完全清楚),我认为这些组合不起作用,因此这是完全可以预料到的结果:

  • mysite2.com/Webapp1/
  • mysite2.com/MonitorApp/
  • mysite.com/Webapp2/

最后一个似乎是故意的,前两个不是。如果这是正确的,那么我的建议如下:

<VirtualHost 255.255.255.1:80>
    ServerName mysite.com
    ServerAlias aliasmysite.ca
JkMount /Webapp1/* LoadBalanceWorker
JKmount /MonitorApp/* LoadBalanceWorker
</VirtualHost>

<VirtualHost 255.255.255.2:80>
    ServerName mysite2.com
    ServerAlias aliasmysite2.ca
JkMount /Webapp1/* LoadBalanceWorker
JkMount /Webapp2/* LoadBalanceWorker
JKmount /MonitorApp/* LoadBalanceWorker
</VirtualHost>

我希望这足够清楚,可以引导你,即使我误解了你的描述。

答案2

我不确定我是否正确理解了您的架构,但看起来您有两组网站,您正试图用域名将它们分开。您只有一个工作器“LoadBalanceWorker”。您应该有两个工作器,一个用于公共应用程序,另一个用于员工应用程序。

相关内容