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

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

如果我拥有一个位于互联网上的 IP 地址,但拥有多个网站名称,我该怎么做?例如,当托管公司拥有共享 IP,但我拥有无限域名(以及该机器上的其他人)时。

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

我是主办公司

答案1

它是 HTTP 1.1 协议的一部分。

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

因此,如果 snoopy.net 和 woodstock.org 都共享 192.0.32.10,并且您的浏览器正在尝试从特定的 http 请求中获取内容,则内容http://snoopy.net/doghouse 将如下所示:

GET /doghouse HTTP/1.1
Host: snoopy.net

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

GET /seeds HTTP/1.1
Host: woodstock.org

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

还会有其他用于 cookie 和浏览器类型以及允许的内容等内容的标头,但是“主机”标头具体可以让 Web 服务器知道需要哪个虚拟网站。

更多内容RFC2616

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


编辑

** 在评论中重力指出 TLS 规范中对 SSL 进行了扩展,允许服务器知道用户正在尝试访问哪个网站,并且大多数现代 Web 浏览器都具有这些扩展,因此必须有点太强烈了。

答案2

所有现代浏览器都会随请求一起发送一些内容,称为“Host:”标头。

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
bit 标识相关网站。

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

至于您的具体问题,您必须了解特定托管公司希望您如何请求配置。

答案3

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

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

答案4

简而言之...

一 - 将您各个域的 DNS 条目设置为全部指向您的盒子。

二 - 按照其他人的描述,设置您的网络服务器(您没有说哪一个)以匹配请求的主机名。

这样,所有域的所有请求都会发送到同一台机器,并且它的配置会获取请求的域并将其路由到包含该站点内容的正确文件夹。

相关内容