服务器主机名应该设 FQDN 还是短名称
主机名可采用短名称或 FQDN,需遵循发行版、集群和身份系统约定。解释 hostname、hostname -f、DNS 与 hosts 的区别,避免修改主机名破坏服务身份。
一句话回答:没有统一要求主机名必须是短名或 FQDN。systemd 支持符合规则的单标签名或 FQDN;应优先遵循发行版、域/集群和软件的约定。短名加 hosts/DNS 解析是常用方案,但不是唯一正确方案。证书验证看访问名称和 SAN,不由 hostname 的长短决定。
两者的分工
| 短名称 | FQDN | |
|---|---|---|
| 例子 | web01 |
web01.prod.example.com |
| 设在哪 | hostnamectl set-hostname |
DNS 记录 + /etc/hosts |
| 用在哪 | 提示符、日志、本地标识 | 网络定位、证书、邮件 HELO |
Linux 上使用短名的一种配置
# 1. 主机名设短名
hostnamectl set-hostname web01
# 2. 以下是写入 /etc/hosts 的数据行,不是 shell 命令
# 127.0.1.1 是部分 Debian 系常用约定,按发行版/网络身份要求选择地址
127.0.1.1 web01.prod.example.com web01
验证:
hostname # web01(短名)
hostname -f # web01.prod.example.com(FQDN,靠 hosts/DNS 解析)
hostname -f 能返回正确 FQDN 是很多软件(邮件服务、Kerberos、某些监控 agent)正常工作的前提。
变更主机名后,也要检查日志中实际记录的主机标识。若通过 DataKit把日志送入观测云,选取变更前后各一条记录,确认主机与服务字段仍能对应同一业务;保留变更时间,避免查询时把历史名称误认成另一台故障主机。
哪些场景真的需要 FQDN
- 邮件服务器:EHLO 通常使用可解析 FQDN;SMTP 也定义了无法使用有意义名称时的地址字面量,实际投递仍需符合接收方策略
- TLS 证书:证书签给 FQDN,应用配置里要用 FQDN 访问
- Kerberos/AD 域:主体名基于 FQDN
- 集群内部寻址:K8s、Consul 等按 FQDN 定位节点
这些场景的共同点是"网络身份",而它们都走解析层,不要求主机名本身是 FQDN。
常见问题(FAQ)
Q:把 hostname 直接设成 FQDN 会怎样?
A:FQDN 本身是受支持的选择。应验证日志身份、Kerberos/证书配置和集群注册是否一致,不要仅为显示短而改动已有主机身份。
Q:hostname -f 报错 "Name or service not known"?
A:FQDN 解析没配。检查 /etc/hosts 里有没有"IP FQDN 短名"这一行,或内网 DNS 是否有该主机的记录。
Q:云服务器(阿里云/AWS)的主机名要不要改?
A:先检查 cloud-init、云 DNS 和服务发现约定。修改操作系统主机名不会保证云 DNS 同步更新,也可能在重启后被覆盖;已有生产实例应规划影响与回退。
参考资料
本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。