hostname 用于显示系统的 DNS 名称,以及显示或设置其主机名或 NIS 域名。
计算机系统 (Linux) 是否只有一个主机名?
在虚拟主机中,可以将多个主机名解析为 Web 服务器中的不同根目录。如果一个计算机系统(Linux)只能有一个主机名,虚拟主机怎么可能?
谢谢。
ilk*_*chu 28
是的,也不是。这是两个不同的东西,称为主机名。
“内部”主机名基本上是内核保存的字符串。这是hostname命令(或gethostname()调用)返回的值,它在系统中是唯一的(*)。
当程序想要为其运行的系统输出一些标识符时,它主要使用。例如,\h在 Bash 中PS1扩展为主机名。同样,系统日志样式的日志文件也包括日志条目上的主机名。
(* 尽管正如 Stephen Kitt 评论的那样,命名空间可用于向同一系统上的进程显示不同的主机名。这主要用于容器,它们试图表现得像它们是不同的系统。)
然后还有其他系统使用的DNS 名称来查找另一个系统的 IP 地址。可能有多个 DNS 名称指向同一个 IP 地址,因此指向同一个主机。
内部主机名和 DNS 名称不需要相同。假设某人有一个他们决定使用 IP 地址调用orange(*)的网络服务器192.0.2.9。它可以为两个不同的域提供服务,并且 DNS 将设置为具有www.example.org和www.example.com两者都指向192.0.2.9,而系统的内部主机名可能是orange.example.org或只是orange。在这种情况下,DNS 设置通常也会在指向 name 的点上进行反向查找,但没有什么可以强制这样做的。192.0.2.9orange.example.org
(* 因为他们喜欢用水果来命名他们的服务器。有人可能会使用webserver1这样的名称,但重点是它不需要以实际域之一命名。)
除此之外,虚拟主机要求浏览器告诉网络服务器它试图访问的站点的名称。否则服务器将不知道客户端试图访问哪个虚拟站点。HTTP 具有相应的Host标头。
混淆 DNS 名称和内部主机名之间区别的是mDNS 协议 (例如由avahi 守护进程实现)和其他发现协议。mDNS 使主机可以查询同一网络上的所有其他主机的名称信息,并使它们自己的主机名在其他主机上可见,而无需在 DNS 中明确设置它们。
计算机系统 (Linux) 是否只有一个主机名?
不。
[我将完全忽略任何人都可以通过将 DNS 记录指向其地址来为您的主机提供任何他们喜欢的名称,或者您可以在 中为它设置多个别名/etc/hosts,或者任何关于名称真正含义的哲学考虑]
在 linux 系统上,主机名只是一个每个进程的资源(“UTS 命名空间”),默认情况下由其子进程继承,但可以使用unshare(2)或clone(2)使用CLONE_NEWUTS标志脱离。您应该查看namespaces(7)联机帮助页。
就像 pid、端口号、挂载点等一样,主机名不再是一个全局标识符,它可以像地址空间(虚拟内存)或进程的文件描述符表一样被虚拟化。
在虚拟主机中,可以将多个主机名解析为 Web 服务器中的不同根目录。如果一个计算机系统(Linux)只能有一个主机名,虚拟主机怎么可能?
虚拟主机是完全不同的东西,而且它通常通过配置一个通配符DNS记录进行(例如,*.foo.com=> 13.13.13.13)与Web服务器上运行13.13.13.13,并服务于不同的目录/资源基础上的价值的HTTPHost:标头[1](这是高度可配置; 大多数 Web 服务器能够基于任何http 标头提供不同的资源,而不仅仅是Host:)。在所有这些中,运行 Web 服务器的系统的操作系统没有任何作用。
[1] 或在https 的情况下服务器名称指示的值,这允许同一网络服务器为不同的虚拟主机使用不同的证书。