指定“主机名”时,我们还需要指定端口吗?

指定“主机名”时,我们还需要指定端口吗?

https://en.wikipedia.org/wiki/Virtual_hosting

基于名称的虚拟主机对同一个 IP 地址使用多个主机名。

“主机名”对应 IP 地址还是一对 IP 地址和端口?

指定“主机名”时,我们还需要指定端口吗?

如果这很重要,请仅考虑虚拟托管。

谢谢。

答案1

主机名不对应于 {ipaddress,port} 元组。主机名只是服务器的名称,应该可以解析为一个或多个 IP 地址。端口与主机名完全无关。

答案2

“虚拟主机”只是一个软件的功能,它利用额外上下文请求采取不同的行动。

需要注意的一件重要事情是 TCP/IP 本身对主机名一无所知;它们的主要用途是作为查找 IP 地址的一种方式。

经典的例子是使用基于名称的虚拟主机的 HTTP 服务器,其工作原理如下:

  • 用户请求 URL。在 DNS 中查找域名,以找到 IP 地址。
  • 打开与特定 IP 地址和端口的 TCP 连接。(对于 HTTP,默认为端口 80;对于 HTTPS,默认为端口 443)。
  • 客户端通过该连接发送请求,其中包括所用协议指定的所有信息。
    • 在 HTTP 1.1 中,这包括“主机”标头,这是用户查找 IP 地址的域名。
    • 对于安全连接,TLS 握手可以包含“服务器名称指示”字段,以便在证书达成一致之前可以使用该字段。
  • 监听 IP 地址和端口的服务器软件现在拥有所有三部分信息:IP 地址、端口号和主机名;它可以使用这些信息来确定要将哪个配置应用于请求。此配置是“虚拟主机”。

答案3

主机名由 DNS(或其他名称解析,如主机文件)处理。Web 服务器监听 IP/套接字,但在运行虚拟主机时,它们还会查看请求标头,了解用于请求页面的 FQDN。

当运行虚拟主机的 Web 服务器响应请求时,它会查看请求标头以查看请求是否来自它知道的主机,然后提供正确的页面。例如,如果我有一个带有 initech.xyz 虚拟主机的服务器,DNS 会将其指向我的 Web 服务器的 IP,该服务器正在监听默认的 http/s 端口 (80/443)。根据配置,您可以打开/关闭每个虚拟主机响应的不同端口,但从 IP/端口的角度来看,如果端口已启用,则它是打开的。

DNS 也可以有多个 IP 解析为同一个名称,反之亦然。

相关内容