据我了解,当您使用浏览器从网站请求 url 时,它会询问操作系统指向的 DNS 服务器是否知道与服务器的 dns 名称相关的 IP 地址;然后,如果 DNS 服务器找到所请求的服务器,它将返回 ip,以便浏览器可以向 Web 服务器请求该 url。
考虑到此时浏览器使用服务器的 IP 地址而不是 dns 名称请求 URL,网络服务器 (Apache2) 如何知道如何返回与 dns 名称关联的正确 VirtualHost?
我的头脑告诉我,这与浏览器标头有关,但我并不完全确定这一点。
笔记:这是一个相关解决方案
答案1
HTTP 请求有许多标头,而不仅仅是请求的路径。这些标头之一(Host:
标头)是您请求的主机名(对于 unix.SE 来说是“unix.stackexchange.com”)。 Apache 会查看此情况并适当地处理请求。
附注:HTTPS 过去仅限于每个 IP 一个证书,因为Host:
标头是加密的。在服务器获取该标头之前,它不知道要发送哪个证书,但在获取请求(需要证书)之前它无法获取标头。这个问题在 TLS 中通过服务器名称指示扩展解决了,该扩展Host
在初始握手中添加了类似于标头的内容。
答案2
HTTP 虚拟主机的工作方式是使用 HTTP 服务器作为自身的“代理服务器”,浏览器发送用于识别目标虚拟主机的主机标头。