我正在尝试设置自己的 vps 托管。这不是付费服务,只是我和一些书呆子朋友的一次实验。
我希望能够做到的是:在 1 个外部 IP 上运行多个虚拟服务器。这些服务器可以运行从 Minecraft 服务器到简单的 http 服务器的任何内容。它们还需要通过 SSH 进行访问。
我不明白如何使用域名来寻址这些服务器。我做了一些研究,发现我可以将 Vhosts 与 Apache 一起使用。但是这仅适用于 http 服务器。也有人建议我使用反向代理(squid),但这也仅适用于 http 请求。
我可以为不同的服务器使用不同的端口,但这并不理想,也不是我想要的。
有人能建议一个设置吗?也许是一些教程或什么的。
答案1
如果您只有 1 个 IP 地址(除了您建议的 http 代理方法),则无法通过域名访问虚拟机。只需多花点钱购买一个 /29 IP 地址类别即可。
至于虚拟化,您有一些选择。现在的主要战斗是在 Xen 和 KVM 之间,两者都有激烈的支持者。我目前正在使用 Xen,我对它非常满意。
答案2
要实现服务的完全分离,您需要利用虚拟机。它们可以配置为在单个物理服务器上共享相同的网络接口和 IP。在将连接传递到虚拟机进行 HTTP 流量之前,您可能必须使用主机上的第 7 层防火墙路由流量。除非您修改 OpenSSH 守护程序,否则 SSH 可能只需要使用不同的端口。在此配置中,您可以在单个主机中生成许多完全独立的“虚拟操作系统”。然后,您可以为每个朋友分配一个 VM,其中每个 VM 都可能在其内部运行多个虚拟 HTTP 站点。VM 的行为就像一个普通的操作系统,不知道它实际上是虚拟化的,与并行操作系统共享 CPU 和内存资源。
我不确定你是否实际上需要这种类型的分离,但这将实现您想要的效果。不过,不要指望它能够在不花一些钱购买硬件的情况下很好地扩展负载。
答案3
是的,我感觉你的帖子有点混乱。虚拟机 (VM) 就是这样;一个逻辑上完全独立的,我们可以说,一个模拟硬件实例,你可以在其上安装 Linux 或 Windows 等操作系统。
整个 HTTP 和 DNS 概念与虚拟机无关!像 stackexchange.com 这样的域名可能托管在多台物理机或虚拟机上,以便实现负载平衡或通常保持内容分离。
您可以在单个 IP 地址上托管多个域(stackoverflow.com、stackexchange.com)。这是 HTTP 1.1 规范的一部分。在 Apache 下,它被称为基于名称的虚拟主机(简称 vhosts)。Microsoft IIS 中也存在同样的功能。
由于 Web 服务器软件(Apache 和 IIS)在操作系统(分别为 Linux 和 Windows)环境中运行,因此您需要 VM 或物理硬件来运行操作系统和 Web 服务器软件(apache、IIS)。
Apache/IIS(及其他)将自身绑定到操作系统中的 IP 堆栈,该堆栈同样在 VM 或物理硬件上运行。IP 堆栈以及与管理 IP 地址、IP 解析(称为解析器)相关的所有相关管理都是特定于操作系统的。例如,在 Linux 下,您可以在许多发行版中处理 /etc/resolv.conf,或者您可以设置 BIND 来响应 DNS 请求,以将 stackoverflow.com 之类的内容转换为 IP 地址。
因此,您可以拥有一个运行 Apache 的 Linux VM,并在单个 IP 地址上托管多个网站!
诀窍是让 DNS 和 Web 服务器软件协同工作,以便不同的协议(http、dns)正确无误。注意:您也可以在虚拟机之外托管 DNS。
希望这可以帮助
要回答关于如何让单个公共 IP 访问运行网站的多台虚拟机或物理计算机的问题的另一部分,您需要一个反向代理。Apache 可以做到这一点;不确定 IIS 是否能做到这一点,而且 HAProxy 也可以做到这一点。
例如,您可以让 HAProxy 监听单个公共 IP,然后将流量路由到私有 IP 上的正确内部服务器。请记住,这里是双向通信 - 因此您的 Web 服务器的回复需要显示为好像来自单个 IP。
答案4
我不确定它是否会起作用,这只是我正在考虑的事情:
您可以尝试为每台通过 IPv4 地址传输所有内容的机器分配一个 IPv6 地址。