我正试着建立我自己的虚拟主机。这不是有偿服务,只是我和一些书呆子朋友的一个实验。
我想要做的是:在一个外部IP上运行多个虚拟服务器。这些服务器可以运行任何东西,从我的服务器到简单的http服务器。它们还需要通过SSH访问。
我不明白的是如何使用域名来处理这些服务器。我做了一些研究,发现我可以在Apache中使用Vhost。但是,这只适用于http服务器。也有人建议我使用反向代理(Squid),但这也只适用于http请求。
我可以为不同的服务器使用不同的端口,但这并不理想,也不是我想要的。
有人能建议一个圈套吗?也许是一些教程之类的。
发布于 2011-01-10 23:05:22
如果只有一个IP地址(建议的http代理方法除外),则无法通过域名访问虚拟机。只需花一些额外的钱,买一个/29 IP地址类。
至于虚拟化,您有一些选择。现在主要的战斗是Xen和KVM,每个人都有着激烈的支持者。我目前正在使用Xen,我对它非常满意。
发布于 2011-01-10 21:49:54
要实现服务的完全分离,您需要利用虚拟机。它们可以配置为在单个物理服务器上存在时共享相同的网络接口和IP。在将连接传递到至少用于HTTP通信的虚拟机之前,您可能必须使用主机上的第7层防火墙路由通信量。除非您修改OpenSSH守护进程,否则SSH可能只需要使用不同的端口。在这种配置中,您可以在单个主机中生成一些完全独立的“虚拟操作系统”。然后,您可以为每个朋友分配一个VM,在这些朋友中,aach VM可能在其内部运行多个虚拟HTTP站点。VM的行为就像一个正常的操作系统,不知道它实际上是虚拟化的,与并行操作系统共享cpu和内存资源。
我不确定你是否真的需要这样的分离,但这会完成你想要的。不过,不要指望它在不向硬件投入一些钱的情况下就能很好地扩展负载。
发布于 2011-04-02 16:34:00
是的,我感觉到你的帖子有点混乱。虚拟机( Virtual,VM)就是这样的;我们可以说,这是一个逻辑的、完全独立的仿真硬件实例,您可以在其上安装Linux或Windows这样的操作系统。
整个HTTP和DNS概念与VM无关!像stackexchange.com这样的域可以托管在多个物理或虚拟机上,以便负载平衡,或者通常只是保持内容分离。
您可以在一个IP地址上承载多个域(stackoverflow.com、stackexchange.com)。这是HTTP1.1规范的一部分。在Apache下,它被称为基于名称的虚拟主机(vhost,简称vhost)。Microsoft IIS中也存在相同的功能。
由于web服务器软件(apache和IIS)是在操作系统(Linux和Windows )的上下文中运行的,因此需要VM或物理硬件来运行OS和web服务器软件(Apache、IIS)。
Apache/IIS (和其他人)将自己绑定到操作系统中的IP堆栈,操作系统再次运行在VM或物理硬件上。IP堆栈和与管理IP地址相关的所有相关管理,IP解析(称为解析器)都是OS特定的。例如,在Linux下,您可以在许多发行版上处理/etc/rupv.conf,或者可以设置BIND来响应DNS请求,从而将stackoverflow.com之类的内容转换为IP地址。
因此,您可以在一个IP地址上运行一个Linux,运行Apache并托管多个网站!
诀窍是让DNS和您的web服务器软件结合在一起或协同工作,以便不同的协议(http、dns)是正确的。注意:您也可以在VM之外托管DNS。
希望这能帮上忙
要回答有关如何使单个公共IP访问多个VM或运行网站的物理计算机的问题的另一部分,您需要一个反向代理。Apache会这样做;不确定IIS,而且也有HAProxy可以做到这一点。
例如,您可以让HAProxy侦听单个公共IP,然后将通信量路由到私有IP上正确的内部服务器。请记住,这里有两种方式的通信--所以您的web服务器的回复需要显示出来,就好像它来自于单个IP。
https://serverfault.com/questions/220862
复制相似问题