我们有一个 Debian X64 服务器,它目前有一个 tomcat 实例,其中我们有 3 个webapps
文件WAR
。此外,我们有一个 Apache 网络服务器,它运行着一个 CMS 系统。最后一个项目是Maintenance
webapp,当我们在服务器上工作并且服务不可用时会显示它。
我们面临的问题是:
- Tomcat 或 Apache Web 服务器中只有一个始终在端口 80 上运行。
- 对于 Tomcat 应用程序,必须通过它们不同的上下文路径来访问这些应用程序。
- 我们无法在多个域名下运行所有内容,而是在单个服务器下运行。
我长期想做的事情:
- 使用 Tomcat(首选)或 Apache Web 服务器作为负载平衡器,它将根据域名中继请求。所以,如果有人在调用 url
www.xyz.com
,那么它应该调用XYZ
我们拥有的 webapp。相同的 webapp 名称和域名纯属巧合。 - 将
Maintenance
webapp 绑定到整个网格,当任何域不活动、没有响应或忙时都会调用它。
我创建了一张图片(一张可怕的.. :-( ),它更形象地解释了这项任务。
正如您现在可以看到的架构,这是/是我的问题。
- 这是一个好方法吗?如果没有,请告诉我在哪里以及我可以做得更好。
- 我正在尝试做的任务,它叫什么?网格配置,负载平衡?
- 如何将所有 webapps、网站联系在一起,这些网站可以通过不同的 URL 引用,但会指向正确的 webapp 或网站。
- 我对 Apache tomcat 和 Linux 管理有很好的了解,而不是 Apache 网络服务器。任何人都可以帮助我解决这个问题,一些计划和我需要什么,所以我可以执行它。
请注意,我们在 DNS 中为所有基于 webapps 和 webserver 的网站注册了域名。
我希望我已经添加了足够的信息,如果有任何需要,请告诉我。你能帮忙的话,我会很高兴。非常感谢。:-)
考虑到您只有一个 IP 和一台服务器,我会:
使用基于名称的虚拟主机在端口 80 上放置一个 apache 实例侦听(因为您只有一个 IP,如果您打算使用 HTTPS,请注意最终的 SSL 问题,请在此处查看:https ://wiki.apache.org/httpd/NameBasedSSLVHosts )
因此,您将为每个子域拥有一个虚拟主机,假设您的域是 example.com,您将拥有:
在管理应用程序子域的虚拟主机上,您可以根据需要使用 mod_jk、mod_proxy_ajp 或 mod_proxy_http 配置反向代理。我会为tomcat选择mod_jk。
有了这个,你就解决了 3 个问题。
这也涵盖了您的第一个长期计划,第二个:
您可以通过多种方式做到这一点。例如,使用 Apache 上的 500 / 503 错误的自定义错误页面重定向到您的 maintenace.example.com。这可能是它自己的问题
至于你的最后一个问题:
我想我也涵盖了这个
虚拟主机(最终负载平衡,见后文)
这是由 Apache 虚拟主机和代理处理的。您甚至可以重写,因此您不必在 url 中使用上下文路径。这也可能是它自己的问题。
我想我也涵盖了这个。
旁注,我会使用至少两个 tomcat,但更好的是,每个应用程序使用两个 tomcat。至少有两个,这样你就可以在 Tomcat 死机的情况下得到保障。每个应用程序两个,因此您可以让您的应用程序彼此隔离(在不同的 JVM 中运行)。如果出现 ecc 问题,这非常方便指向特定的应用程序。
希望这可以帮助。
我终于能够通过将其更改为以下配置来解决此问题:
Tomcat 的 server.xml :
在 jk.conf 中添加了这个:
worker.properties:
uriworkermap.properties:
将此添加
000-default
到sites-enabled
就是这样。然后我启动了tomcat并重新启动了Apache网络服务器,它现在可以工作了。