https://en.wikipedia.org/wiki/Virtual_hosting
基于名称的虚拟主机对同一 IP 地址使用多个主机名。
基于名称的虚拟主机所需的技术先决条件是具有 HTTP/1.1 支持(今天很常见)的 Web 浏览器,以在请求中包含目标主机名。这允许在一个 IP 地址后面托管多个站点的服务器提供正确的站点内容。更具体地说,它意味着设置 Host HTTP 标头,这在 HTTP/1.1 中是强制性的。[2]
例如,服务器可能正在接收对两个域 www.example.com 和 www.example.net 的请求,这两个域都解析为相同的 IP 地址。对于 www.example.com,服务器将从目录 /var/www/user/Joe/site/ 发送 HTML 文件,而对 www.example.net 的请求将使服务器从 /var/www/user 提供页面/玛丽/网站/。同样,同一域的两个子域可以托管在一起。例如,博客服务器可能同时托管 blog1.example.com 和 blog2.example.com。
当同一 Web 服务器上的多个基于名称的虚拟主机共享同一个 IP 时,它们是否一定共享同一个端口?
谢谢。
不,端口号是完全独立的。将主机名/IP 地址视为办公室的主要电话号码,将端口号视为您连接到主要号码后拨打的分机号。您可以让多个不同的服务器进程在同一个 IP 地址上侦听,每个进程在不同的端口号上,就像公司有多个员工每个人都接听自己的分机一样。
更进一步地使用这个比喻,这些员工中的每一个都会接听电话,根据您所说的您呼叫的公司(即您用来连接的多个虚拟主机名中的哪一个)来用不同的公司名称来标识自己。这实际上发生在接听服务上,他们可以在接听之前看到您拨打的号码,当他们拿起电话时,他们会用拥有该号码的公司的名称来回答。