子域名如何传递至网络服务器?

子域名如何传递至网络服务器?

我知道 dns 会将 example.com 之类的地址解析为 11.22.33.44 之类的 IP 地址,但我对子域名的解析方式有点困惑,因此当您输入http://subdomain.example.com那么,实际传递给 11.22.33.44 的服务器的是什么?换句话说,example.com = 11.22.33.44,但 subdomain.example.com/path = ???

“子域”和“路径”是否作为 http 标头传递,或者以某种方式映射到 url 中,或者是什么?

提前致谢。

编辑:如果我理解正确,BloodPhilia 表示 subdomain.example.com 实际上是不同的域,原则上可以解析为完全不同的 IP。但如果是这样,那么那些拥有大量(看起来像)子域但实际上映射到网站上某个路径的主机怎么办?例如,blogspot 托管了数百万个博客,它们都看起来像这样:

aaa.blogspot.com
bbb.blogspot.com
...millions more...
yyy.blogspot.com
zzz.blogspot.com

这些显然不是具有自己 IP 的子域名,而是一些映射,如 aaa.blogspot.com --> www.blogspot.com/aaa,但这是如何实现的?实际上什么被传递给 blogspot.com 的 Web 服务器?

答案1

DNS 对最终用户和 Web 服务器而言,对域名、子域名、子子域名以及子(x)子子域名(最后两个组成!)的处理方式完全相同。

例如,DNS 服务器可以对domain.comwww.domain.com或 返回不同的结果mysite.domain.com

现在,您可能已经知道,世界上的域名数量比 IP 数量多得多。

因此,服务器使用称为“主机头”的东西来提供正确的内容。

无论您实际请求什么,您的机器都会以相同的方式处理所有事情 - 它会在 DNS 上查找应该连接的 IP,一旦连接,它会将主机标头作为请求的一部分发送。然后,Web 服务器会发回配置为发回的内容。

一个很好的测试/学习/诊断工具是 Wfetch,它可以点击此处下载

以下是访问 superuser.com 时发送的标头示例

替代文本

以下是 IIS(Web 服务器)中主机头的配置:

替代文本

(图片来自这里

如果您有兴趣,Serverfault.com 和 Superuser.com 位于同一个 IP 上,这是用于分离站点并提供不同内容的技术。

如需了解有关该主题的更多内容,您可能需要阅读维基百科关于虚拟主机的文章

(我知道您了解基础知识,但我认为最好再多说一点,以便任何通过 Google 搜索此内容的人都可以学到一点,如果他们愿意的话!)

编辑

因此,按照您的例子,我猜测像 blogspot 这样大的公司很可能有一个通配符 DNS 条目(通配符条目对任何查询都返回相同的结果),该条目指向一个负载均衡器,然后该负载均衡器会将其发送到许多不同的 Web 服务器,这些服务器可能没有每个主机头单独的站点,而是有一个单一的站点/脚本,输入的地址(无论是否有主机头)都会在该站点/脚本上进行解析,然后从其 CDN 中提取正确的内容。

虽然,也有可能(但不太可能)每个 ip 只有几千个条目,但 ip 会指向几个服务器,并且他们只为每个具有匹配主机头的站点设置一个条目。

答案2

事实上,如果两个域具有相同的 IP 地址,则服务器依赖浏览器来指定请求的域。喜欢

GET / HTTP/1.1
Host: data.stackexchange.com

答案3

子域名并不是一个正确的词。通常,子域名是独立的域名,因此首先将 sub.example.com 传递给 DNS,如果未找到此子域名的特定记录,则将请求传递给顶级域名的 IP。(example.com)在该服务器上再次发出请求,服务器将采取相应行动。

换句话说,对 example.com 的请求与对 sub.example.com 的请求没有什么区别。

答案4

Subdomain.example.com 无法解析为 11.22.33.44 - 就您的问题而言,它通常具有自己的 DNS A 记录并解析为不同的地址。

可以允许子域解析为与父域相同的地址,并且仍然提供不同的页面,但是如果这样做,您必须在同一台 Web 服务器上托管两个网站,并且需要在服务器配置中对此进行说明。您对此进行说明的方式取决于您正在运行哪种 Web 服务器。

相关内容