如果我拥有一个位于互联网上的 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.combit 标识相关网站。
在 IIS 和 Apache 中,您可以配置仅接受来自特定 IP/主机组合的请求的虚拟网站。
至于您的具体问题,您必须了解特定托管公司希望您如何请求配置。
答案3
答案4
简而言之...
一 - 将您各个域的 DNS 条目设置为全部指向您的盒子。
二 - 按照其他人的描述,设置您的网络服务器(您没有说哪一个)以匹配请求的主机名。
这样,所有域的所有请求都会发送到同一台机器,并且它的配置会获取请求的域并将其路由到包含该站点内容的正确文件夹。