您如何拥有一个IP地址和多个网站?


27

如果我有一个IP地址位于Internet上但有多个Web名称,该如何获取?例如,当托管公司拥有共享IP但我获得无限的域名(以及该框中的其他所有人)。

我在Internet上有一个盒子,但是当有人键入不同的www ...时,我想指向另一台拥有不同网站的机器(它就在另一个盒子旁)。这就是所有子域化吗?谢谢。

我是托管公司

Answers:


36

它是HTTP 1.1协议的一部分。

具体来说,HTTP 1.1协议包括一个名为“ host:”的标头,它指定客户端尝试访问特定服务器上的哪个网站。

因此,如果snoopy.net和woodstock.org都共享192.0.32.10,并且您的浏览器试图从http://snoopy.net/doghouse 特定的HTTP请求中获取内容,则该代码应类似于:

GET /doghouse HTTP/1.1
Host: snoopy.net

如果所需的网址是http://woodstock.org/seeds请求,则该请求看起来像

GET /seeds HTTP/1.1
Host: woodstock.org

在这两种情况下,您的计算机和服务器的端口80之间都会有一个tcp套接字。服务器将根据主机标头从/var/www/snoopy.net或/var/www/woodstock.org/获取内容。

Cookie和其他内容(如浏览器类型和允许的内容)将有其他标头,但是“主机”标头专门是允许Web服务器知道需要哪个虚拟网站的标头。

RFC2616还有更多内容。

这也是为什么https站点必须具有自己的IP地址的原因-ssl密钥交换和证书验证是在进行http交易之前进行的,因此http服务器将不知道发出“ woodstock”证书。 org”或“ snoopy.net”,当它在192.0.32.10的端口443上收到https连接时。


编辑

注释中的**指出了TLS规范中SSL的扩展,该扩展使服务器可以知道用户尝试访问哪个网站,并且大多数现代Web浏览器都具有这些扩展,因此也必须有点强大。


因此网络服务器会看到该标头并将其移至正确的网站?您可以在同一端口上拥有多个网站吗?
约翰尼

1
这正是它的目的。一个“服务器”(例如apache)具有192.0.32.10的端口80,该端口具有许多DNS条目,每个条目都是一个“站点”。服务器根据“主机”标头知道所需的站点。
克里斯,2010年

3
DNS配置为使两个名称都指向服务器正在侦听的相同IP地址。服务器在相同的IP和端口上接收连接,但是,当浏览器告诉它“我想要SiteA.com”时,它知道它需要提供与请求SiteB.com时不同的内容。
Massimo 2010年

2
更清楚地说:这两个站点是在HTTP协议级别而不是TCP / IP级别上进行区分的。就像有人打电话给您的办公室并要求与John或Susan通话时一样:电话号码相同,但是可以使用多个人。
Massimo 2010年

1
现在,大多数Web浏览器和服务器都支持TLS服务器名称指示,这消除了每个网站只需要一个IP地址的要求。
grawity 2010年

12

所有现代浏览器都随请求一起发送的东西称为“主机:”标头。

firefox为此页面发送的实际请求是:

主持人:superuser.com
用户代理:Mozilla / 5.0(Windows; U; Windows NT 6.0; zh-CN; rv:1.9.1.7)Gecko / 20091221 Firefox / 3.5.7(.NET CLR 3.5.30729)
接受:text / html,application / xhtml + xml,application / xml; q = 0.9,* / *; q = 0.8
接受语言:en-us,en; q = 0.5
接受编码:gzip,deflate
接受字符集:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
保持生命:300
连接:保持活动状态

如您所见,

主持人:superuser.com
位标识有问题的网站。

在IIS和Apache中,您可以配置仅接受来自特定IP /主机组合的请求的虚拟网站。

至于您的特定问题,您将必须阅读有关特定托管公司希望您如何请求配置的信息。


还应该指出,您需要为IP地址设置多个DNS条目。
Tadeusz A.Kadłubowski10年

@Tadeusz:可以设置通配符DNS条目,因此这不是绝对必要的。
John Gietzen 2010年

6

在单个IP地址/主机上托管多个域/子域的技术称为虚拟主机。http get请求包含请求所针对的域名,该域名允许Web服务器将请求与特定的虚拟域进行匹配。

如果内部有多个物理主机且仅具有一个外部IP,则需要考虑设置反向代理以将请求转发到正确的计算机/内部IP地址。


或者您当然也可以在其他端口上使用其他http服务器。
斩波器

是的,这也是一种选择。但是人们不习惯在输入URL时指定端口,因此我将这种解决方案保留在某些情况下,例如管理界面。
3dinfluence 2010年

3

您的网络服务器上的功能通常称为“虚拟主机”。一旦您将dns条目指向该IP地址(如其他答案所述),服务器将根据所请求的主机的名称为不同的站点提供服务器。

至于指向另一个盒子。如果希望首先获取查询,则可以在大多数Web服务器中配置重定向。如果您在谈论子域,那么您要做的就是将每个子域指向一个不同的IP地址。

即host.com-> IP 1,然后www.host.com-> IP 2和mail.host.com-> IP 3

如果您需要更具体的答案,则需要说出正在运行哪种操作系统的Web服务器软件。

您可能会发现ServeFault是解决此问题的好地方。


1

简而言之...

一-将各个域的DNS条目都设置为指向您的框。

二-如其他人所述,设置您的Web服务器(您不说是哪一台)以与请求的主机名匹配。

这样,对您所有域的所有请求都将发送到同一台计算机,并且它的配置将请求的域发送到包含该站点内容的正确文件夹中。


0

从您的问题来看,听起来好像您为第二个网站有单独的物理服务器。在这种情况下,您将无法为两个服务器使用单个IP地址。您可以a)为第二个主机获取第二个公共IP地址,或者b)设置智能代理,该智能代理根据主机标头将请求转发到内部网络上的其他服务器。我很确定b)是可行的,但是我对它的工作原理一无所知,因此您必须问其他人,这是否是您要尝试的方法。


0

如果我没看错您的问题,那么您有两台不同的计算机通过NAT(网络地址转换)共享IP地址吗?如果是这样,您将不得不让一个站点在不同的端口(而不是80)上侦听-我知道没有什么好办法让路由器根据HTTP“主机”元数据将请求发送到不同的计算机。您最好只为第二台服务器获得第二个IP地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.