linux - 为什么 Digital Ocean 上的主机名 FQDN 设置不正确?

标签 linux dns digital-ocean hostname fqdn

我在 Ubuntu 16.04 Droplet 上观察到此问题,但我认为它也发生在其他基于 Debian 的 Droplet 上。下面有更多解释。

创建全新实例后,我发现 hostname --fqdn 并未像我预期的那样返回 FQDN(完全限定域名),而仅返回主机名,而没有附加域名。

$ hostname
mydroplet
$ hostname --fqdn
mydroplet

我希望看到这样的东西:

$ hostname --fqdn
mydroplet.example.com

这是一个潜在的严重问题,因为许多服务依赖于 FQDN 才能正常工作。

如何解决这个问题?

最佳答案

对于不耐烦的人

下面的这些命令修复了现有 Droplet 上的问题:

echo "domain example.com" | sudo tee /etc/resolvconf/resolvconf.d/head
sudo service resolvconf restart

问题是什么?

命令hostname --fqdn应返回FQDN(完全限定域名),如下所示:

$ hostname --fqdn
mydroplet.example.com

如果您没有看到 FQDN,而只看到主机名...那么...您遇到的问题迟早会损害您的应用程序、shell 脚本或服务。

$ hostname --fqdn
mydroplet

休斯顿,我们有问题!

修复路线

简而言之,我们需要使 /etc/resolv.conf 看起来像这样:

$ cat /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 8.8.4.4

如果您在其中没有看到域 example.com,那么您迟早会遇到问题。

您可能会认为这只是编辑文件的问题,对吗?没那么快! ...我们无法手动更改此文件,因为它是由 Debian 自己维护的。如果您手动更改它,它会在稍后的某个时间自行恢复到其初始状态。

通过 Digital Ocean 的网络界面创建 Droplet

在为 cloud-init 保留的文本区域中添加以下代码片段的用户数据:

#cloud-config
manage_etc_hosts: false
write_files:
  - path: /etc/resolvconf/resolv.conf.d/head
    content: |
      domain example.com
runcmd:
  - service resolvconf restart

上面的代码片段保证 hostname --fqdn 将在您首次登录 Droplet 时立即返回您所期望的内容。

关于linux - 为什么 Digital Ocean 上的主机名 FQDN 设置不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51751430/

相关文章:

django - Django/nginx/uwsgi出现502错误

windows - Windows Communication Foundation 的 Linux/Mac OS X 等价物

android - 如何在android中获取DNS信息

Kubernetes - 如何在集群级别设置 DNS 策略

node.js - 尝试访问 MongoDB 时超时

mongodb - 运行 mongodump 后我得到一个空目录

linux - 捕获一张 Excel 工作表

android - 通过命令行截取的Android屏幕截图的图像格式

linux从现有的公钥创建新的私钥

google-app-engine - 自定义域映射到 Google App Engine 模块或版本