我们正在考虑从 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”。您应该有两个工作器,一个用于公共应用程序,另一个用于员工应用程序。