一台计算机系统(Linux)是否只有一个主机名?


15

hostname 用于显示系统的DNS名称,以及显示或设置其主机名或NIS域名。

一台计算机系统(Linux)是否只有一个主机名?

在虚拟主机中,可以将多个主机名解析为Web服务器中的不同根目录。如果一台计算机系统(Linux)只能有一个主机名,那么如何进行虚拟主机?

谢谢。


DNS A或AAA记录指向多个域的相同IP地址。机器的主机名不一定重要。
RubberStamp

(1)将hostname主机名解析为IP地址时是否使用过输出?(2)A表示IPv4地址,即AAAA IPv6。什么是AAA?
全部

mDNS服务,例如avahi取决于计算机主机名。在这种情况下,hostname.local将解析为机器的本地IP地址。我看到有人写了一个答案,这是我的第一个评论的扩展……对于我的浏览器通知而言,同步性太强。
RubberStamp

AAA是'A'的短错字
RubberStamp

虚拟主机与主机名无关。它完全取决于Web服务器的行为。服务器对HTTP请求标头的不同“主机”字段的响应不同。我认为典型的Web服务器不会做任何与DNS或主机名有关的事情来提供虚拟主机功能。
炸鱼薯条德里克

Answers:


26

是的,没有。有两个不同的东西称为主机名。

“内部”主机名基本上是内核保留的字符串。这是hostname命令(或gethostname()调用)返回的值,在系统(*)中是唯一的。

通常在程序要为其运行的系统输出一些标识符时使用。例如,\h在Bash的PS1扩展名中将扩展为主机名。同样,syslog样式的日志文件还包括日志条目中的主机名。

(*尽管正如Stephen Kitt所说,名称空间可用于在同一系统上向进程显示不同的主机名。这主要用于容器,这些容器试图像它们是不同的系统一样工作。)

然后还有其他系统用来查找其他IP地址的DNS名称。可能有多个DNS名称指向同一IP地址,因此也指向同一主机。

内部主机名和DNS名称不必相同。假设有人决定使用IP地址呼叫orange(*)网络服务器192.0.2.9。它可以服务于两个不同的域,并且DNS将被设置为具有www.example.orgwww.example.com都指向192.0.2.9,而系统的内部主机名可能是orange.example.orgorange。在这种情况下,DNS设置通常还会对指向该名称的点进行反向查找,但是没有什么可强制执行的。192.0.2.9orange.example.org

(*因为他们喜欢用水果来命名服务器。有人可能会使用webserver1诸如此类的名称,但要点是,它不需要以实际域之一来命名。)

除此之外,虚拟主机还要求浏览器告诉Web服务器它试图访问的站点的名称。否则,服务器将不知道客户端尝试访问哪个虚拟站点。HTTP具有该Host标头


混淆DNS名称和内部主机名之间区别的是mDNS协议 (例如,由avahi守护程序实现)和其他发现协议。mDNS使主机可以查询同一网络上的所有其他主机以获取名称信息,并使自己的主机名在其他主机上可见,而无需在DNS中进行显式设置。


谢谢。(1)“ DNS设置通常会将192.0.2.9指向其名称为orange.example.org的名称”不解析给定主机名的IP地址,为什么相反?(2)将hostname主机名解析为IP地址时是否使用过输出?
所有

(2)...当使用路由器和调制解调器通过ISP在您的家中建立本地wifi网络时,可以通过其hostname命令输出来识别网络中的机器,对吗?路由器是否像DNS一样hostname将网络的输出解析为专用IP地址?
所有StackExchange

2
与(1)一样,还有反向查找使用IP地址并返回名称。(对于一个具有一个名称和一个地址的系统,为了清楚起见,您都希望两个都解析为另一个)
ilkkachu

3
小型网络可能正在使用mDNS。不管是好是坏,它使系统所有者可以选择自己的主机名,该主机名可由本地网络上的其他系统访问,而无需向DNS服务器注册。
Mark Plotnick

2
在许多家庭网络中,本地路由器充当DNS解析器。主机在使用DHCP请求地址时发送主机名,路由器会记住该名称并为网络上的所有主机解析该名称。正如Mark和RubberStamp所提到的,还有Bonjour(在Avahi中实现),它允许在LAN(尤其是打印机)上发现服务。还要注意,主机可以具有多个IP地址,并且主机名现在已命名空间,因此进程可以在同一主机上看到不同的主机名。
斯蒂芬·基特

7

一台计算机系统(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记录运行在一个Web服务器上,13.13.13.13并根据http Host:标头的值提供不同的目录/资源[1](可高度配置) ;大多数Web服务器都可以基于任何 http标头(而不仅仅是Host:)提供不同的资源。在所有这些方面,Web服务器正在运行的系统的操作系统不起作用。

[1]或服务器名称指示的值(如果使用https),则允许同一Web服务器对不同的虚拟主机使用不同的证书。


我必须不同意你的看法。对于虚拟主机,我们通常有一组指向单个主机的特定cname记录。我们不使用通配符DNS记录,因为我们域中有许多需要虚拟主机的系统。不包括UTS名称空间(无论如何广泛使用?),您需要hostnamectl报告给定服务器的单个主机名。DNS和hostnamectl是正交的,彼此之间几乎没有关系。
doneal24 '19

1
@ DougO'Neal您不同意什么?以我描述的方式使用通配符DNS记录吗?无论您是否喜欢,它们都被这样疯狂地使用(对双关语很抱歉)。uts信息是在Linux中按进程虚拟化的吗?就是这样。关于仅将名称空间仅用于/将用于罐装集装箱化/虚拟化解决方案的想法(如其他答案中所建议),对不起,但这是“只有女孩玩洋娃娃”或“手动变速器仅在重型卡车中使用”质量;-)
比利叔叔

1

通常,您在/ etc / hostname中设置一个主机名。并且,您在/ etc / hosts中设置了许多域名。

UTS名称空间允许单个系统在不同的进程中具有不同的主机名和域名。有关更多信息:https : //en.wikipedia.org/wiki/Linux_namespaces。因此,对于同一系统,绝对有可能具有多个主机名和域名。例如,同一主机内的Docker容器的主机名与主机系统不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.