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

joh*_*nny 29 hosting subdomain ip-address

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

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

我是托管公司

chr*_*ris 39

它是 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
Run Code Online (Sandbox Code Playgroud)

如果所需的 url 是http://woodstock.org/seeds请求看起来像

GET /seeds HTTP/1.1
Host: woodstock.org
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您的计算机和服务器的端口 80 之间都会有一个 tcp 套接字。服务器会根据 Host 标头知道从 /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 连接时。


编辑

** 在评论中Grawity指出 TLS 规范中有 SSL 扩展,允许服务器知道用户试图访问的网站,并且大多数现代网络浏览器都有这些扩展,所以必须有点太强的。

  • DNS 配置为使 **两个** 名称指向服务器正在侦听的相同 IP 地址。服务器在相同的 IP 和端口上接收连接,但是当浏览器告诉它“我想要 SiteA.com”时,它知道它需要提供与请求 SiteB.com 时不同的内容。 (3认同)
  • 更明确地说:这两个站点是在 HTTP 协议级别区分的,而不是在 TCP/IP 级别。就像有人打电话给您的办公室并要求与约翰或苏珊通话:电话号码是相同的,但可以不止一个人使用。 (2认同)
  • 大多数 Web 浏览器和服务器现在都支持 TLS 服务器名称指示,这消除了每个网站一个 IP 地址的要求。 (2认同)

Joh*_*zen 13

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

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

主机:superuser.com
用户代理:Mozilla/5.0(Windows;U;Windows NT 6.0;en-US;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/主机组合的请求的虚拟网站。

至于您的特定问题,您必须仔细阅读您的特定托管公司希望您如何请求配置。


3di*_*nce 6

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

如果您在内部有多个物理主机,只有一个外部 IP,那么您需要考虑设置反向代理以将请求转发到正确的机器/内部 IP 地址。