Apache 错误“无法可靠地确定服务器的完全限定域名”

Dee*_*epu 491 server apache2

当我使用命令重新启动我的 Apache 服务器时

sudo /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2:
Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Run Code Online (Sandbox Code Playgroud)

服务器是否使用 127.0.1.1 而不是 127.0.0.1?是什么导致了这个错误?

Rin*_*ind 591

6# 13.04 及以上

这只是一个友好的警告,并不是真正的问题(因为有些东西不起作用)。

如果你去:

/etc/apache2/apache2.conf
Run Code Online (Sandbox Code Playgroud)

并插入:

ServerName localhost   
Run Code Online (Sandbox Code Playgroud)

然后通过在终端中键入来重新启动 apache:

sudo systemctl reload apache2
Run Code Online (Sandbox Code Playgroud)

通知将消失。

如果你有一个名字,/etc/hostname你也可以使用这个名字而不是localhost.


127.0.1.1如果它在您的内部,它会使用/etc/hosts

127.0.0.1 localhost
127.0.1.1 myhostname
Run Code Online (Sandbox Code Playgroud)

首选方法

Apache 故障排除

如果您收到此错误:

apache2: Could not determine the server's fully qualified domain name, 
using 127.0.0.1 for ServerName
Run Code Online (Sandbox Code Playgroud)

然后在命令行使用“sudo nano”或桌面上的“gksudo gedit”等文本编辑器创建新文件,

sudo nano /etc/apache2/conf.d/fqdn
Run Code Online (Sandbox Code Playgroud)

或者

gksu "gedit /etc/apache2/conf.d/fqdn"
Run Code Online (Sandbox Code Playgroud)

然后加

ServerName localhost
Run Code Online (Sandbox Code Playgroud)

到文件并保存。这一切都可以在一个命令中完成,如下所示:

 echo "ServerName localhost" | sudo tee /etc/apache2/conf.d/fqdn
Run Code Online (Sandbox Code Playgroud)

但是在 Ubuntu 14.04 上:

 echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf
 sudo a2enconf fqdn
Run Code Online (Sandbox Code Playgroud)

不要忘记“.conf”(没有将不起作用)。

  • [Apache 故障排除](https://help.ubuntu.com/community/ApacheMySQLPHP#Troubleshooting_Apache) 的 Ubuntu LAMP 设置文档中也提到了这一点。他们建议在那里创建一个文件 /etc/apache2/conf.d/fqdn,其中包含“ServerName localhost” (3认同)
  • 在 14.04 安装 `lamp-server^` 后,`/etc/apache2/conf.d/` 不存在 (3认同)
  • 对于最后一步(在 14.04 中创建符号链接),我建议使用 `sudo a2enconf fqdn`,尽管它在技术上应该是相同的。 (3认同)

Sta*_*arx 189

13.10 或更新版本

从 Apache 2.4(自 13.10 起默认可用)开始,您无法使用在conf.d目录中添加配置文件的方法。

Apache 不再使用该conf.d目录。所有配置文件都存储在/etc/apache2/conf-available目录中,所有配置文件现在都应该有一个.conf扩展名。

为了在 Apache 2.4 中解决此消息,我们必须在 conf-available 目录中创建一个配置文件。例如servername.conf

sudo vi /etc/apache2/conf-available/servername.conf
Run Code Online (Sandbox Code Playgroud)

在这里面我们只需要添加一行

ServerName localhost
Run Code Online (Sandbox Code Playgroud)

您可以将前两个命令合二为一:

echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf
Run Code Online (Sandbox Code Playgroud)

如果您想根据要求使用域名或任何其他名称,只需替换localhost为您需要的任何名称即可。接下来,您必须启用此配置。为此,您需要运行以下命令:

sudo a2enconf servername
Run Code Online (Sandbox Code Playgroud)

a2enconf是在 Apaches 2.4 中启用配置文件的命令。还要注意servername上面的命令是取自配置文件的名字servername.conf。如果您的配置文件是,ngenericserver.conf那么您将不得不编写sudo a2enconf ngenericserver.

重新加载服务器后,上述消息将不再困扰您。

sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)

或者

sudo apache2ctl graceful
Run Code Online (Sandbox Code Playgroud)

现在,在此之后,您将看到该消息将不再显示,问题将得到解决。

  • 有谁知道如何让 Apache 说 *哪个 * 配置文件有问题?我不知道为什么开发人员从来没有想过把它放在他们的错误消息中——它几乎不需要太多代码! (4认同)

And*_*Mao 33

Apache2 还可以从正确配置的系统主机名中获取 FQDN,而不是硬编码到 apache 配置文件中。如果主机名改变,硬编码也会引起混淆。您实际上不需要任何ServerName指令httpd.conf或任何 apache 配置文件。

将以下内容放入/etc/hosts

# IPv4 and IPv6 localhost aliases
127.0.0.1 hostname.domainname.com  hostname  localhost
::1       hostname.domainname.com  hostname  localhost
Run Code Online (Sandbox Code Playgroud)

hostname.domainname.com您机器的 FQDN在哪里。

连同在/etc/hostname/或 with 中正确配置的主机名hostnamectl,这也将有助于您机器上的其他服务正常运行(即登录提示,显示This is hostname.domainname.com而不是This is hostname.unknown_domain.)

  • +1 表示“正确配置的系统主机名”。我想正确配置服务器。这也修复了我在日志中的错误`[warn] RSA server certificate CommonName (CN) <fqdn> does not match server name!?` (5认同)
  • 这应该是公认的答案。不过,似乎您可能需要将 FQDN 关联到静态 IP 地址而不是“127.0.0.1”。 (2认同)

gre*_*een 29


[1] 启动默认编辑器,见 sudo update-alternatives --config editor


小智 25

在新版本的 apache2 中,您只需执行如下命令:

sudo nano /etc/apache2/apache2.conf
Run Code Online (Sandbox Code Playgroud)

在文件末尾添加以下新行:

ServerName localhost
Run Code Online (Sandbox Code Playgroud)

然后重启apache2:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

完成。


小智 6

我发现创建一个新文件/etc/conf.d来修改apache2.confhttpd.conf.

这是使我的配置更改与分发包分开的个人偏好。所以更新不那么复杂。

我创建了文件/etc/apache2/conf.d/AAserverName,它只包含:

ServerName myhost.mycomain.tld
Run Code Online (Sandbox Code Playgroud)

其他建议当然也有效。