![选项1:](https://linux22.com/image/744765/%E9%80%89%E9%A1%B91%EF%BC%9A.png)
我想配置一个 CentOS 7/8 主机,使其拥有多个运行 Apache 的 KVM VM,我可以从互联网路由到这些 VM(即分配 DNS A/CNAME 记录)。此操作的典型配置是什么?
例如,我想要有以下 DNS 记录:
site1.example.com 26 IN A 76.81.220.196 -> KVM Guest 1 running Apache
site2.example.com 26 IN A 76.81.220.196 -> KVM Guest 2 running Apache
选项1:
将主机设置为具有公共静态 IP。设置 KVM Bridge 网络,并使用 IP 表将端口路由到 KVM Guest。不过,如果我在端口 80 上运行所有 Apache 服务器,这听起来会遇到冲突。描述这里
选项 2:
主机在 Apache/HAProxy 中运行反向代理,然后按照说明转发到 KVM 中设置的正确 KVM 客户机这里
如果是选项 2,我是否也能转发非标准端口?我可能必须设置一个在非标准端口上使用软件的 Windows Guest,并且也希望将这些端口映射到公共主机。
编辑:
我正在处理的项目是将 IT 人员多年来设置的所有随机专用机箱放到一台(或几台)机架服务器上。
我知道第三个选项 Apache Virtualhosts,并且一直在使用它们。我们目前之所以不考虑它,是因为需要多个 PHP 版本,因为我不需要立即修复使用较新 PHP 版本可能导致的任何错误,也不需要使用奇怪/非标准的配置。我也经常使用 Docker,但由于相关项目截止日期临近,我不确定我是否有时间将所有现有的专用服务重新映射到 Docker 中。
我基本上需要说“Bob 在此服务器上安装了软件 ABC,创建了一个功能完全相同的 VM”。
答案1
老实说,这种做法的最佳实践就是拥有 1 个 apache 实例并使用 vhost。没有虚拟机。优点是您只需要 1 个静态 IP,并且不会浪费资源。
如果您(出于某种原因)确实想要运行多个单独的 Apache 实例,请考虑在容器中运行所有内容。(即 Docker 或 Kubernetes)您仍在运行两个单独的实例,但您并未尝试支持两个完整的操作系统。每个容器都可以拥有自己的静态 IP,或者您可以从主机到容器进行 NAT。这是一种“中间地带”区域,在这里您可以获得与两个独立虚拟机几乎相同的所有保护,但可以节省大量资源并提高性能。
如果你真的疯狂到想要在第三个“主机”操作系统中运行两个完整的操作系统作为客户机,那么是的......我想你可以在虚拟机中运行两个操作系统,然后简单地进行 NAT,或者运行代理服务或集群 Web 服务以重定向到各个虚拟机。
至于哪个选项是“最佳”?...这是一个很大的意见问题,并且绝对不符合 Stack-Exchange 的提问政策准则。(最佳是一个意见问题,需要进行大量讨论才能了解项目的目标)
答案2
后者。使用前端代理(也可以在虚拟机或容器中运行)并根据名称中继到后端。将配置保持在应用程序级别,在众所周知的端口号上运行。
NAT 可能没有必要。代理会自行与后端建立连接,后端可能位于私有网络上。
或者,Web 服务器可以进行基于其自身名称的虚拟托管,无需在其前面放置任何内容。但是,您的设计是每个站点一个访客。
非 HTTP 应用程序没有主机名标头,需要其他方式进行路由。其他应用程序有代理,或者您可以编写一个。