apache2:无法可靠地确定服务器的标准域名,对ServerName使用127.0.1.1


73

当我(重新)启动Apache时,我不断收到此警告。

* 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 [ OK ]

这是我etc/hosts文件的内容:

#127.0.0.1  hpdtp-ubuntu910
#testproject.localhost  localhost.localdomain   localhost
#127.0.1.1  hpdtp-ubuntu910

127.0.0.1   localhost
127.0.0.1   testproject.localhost
127.0.1.1   hpdtp-ubuntu910



# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

这是我/etc/apache2/sites-enabled/000-default文件的内容:

<VirtualHost *:80>
  ServerName testproject.localhost
  DocumentRoot "/home/morpheous/work/websites/testproject/web"
  DirectoryIndex index.php
  <Directory "/home/morpheous/work/websites/testproject/web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf /lib/vendor/symfony/symfony-1.3.2/data/web/sf
  <Directory "/lib/vendor/symfony/symfony-1.3.2/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

转到时http://testproject.localhost,我会得到空白页。

谁能发现我在做什么错?

Answers:


52

默认情况下,Ubuntu不会在Apache配置中指定ServerName,因为它不知道服务器的名称。它尝试对您的IP地址进行反向查找,但不返回任何内容,因此只需将IP地址用作ServerName即可

要解决此问题,请在任何虚拟主机之外添加ServerName指令(例如在中)/etc/apache2/httpd.conf,或为您的主IP地址设置反向DNS响应-在这种情况下为127.0.1.1

也可以忽略它。


3
这是违反直觉的。如果我将ServerName添加到任何虚拟主机之外,如何从同一Apache服务器提供多个虚拟主机?(毕竟,这就是命名的虚拟服务器的意思)-除非您说我可以在(例如)/etc/apache2/httpd.conf中包含多个ServerName条目
user35402

7
然后,您可以在VirtualHost块内添加ServerName / ServerAlias,以使VirtualHost仅与所需的主机名匹配。阅读httpd.apache.org/docs/2.2/mod/core.html#servername进行深入了解。
crb

我一直在寻找这个答案一个多小时。互联网上对此有很多废话,但这解决了我的问题。Thx
Mike

@Mike,你和其他人都是天才!我寻找这个答案四个天。(好的,不是全天工作。)。+1是因为这是第一个答案,它说明了我可以在虚拟主机之外添加ServerName指令而不影响它们。考虑到这一点,ReinoutS的解决方案为我工作(对他也+1)。
索尼桑托斯

27

快速解决方法:

echo ServerName $HOSTNAME > /etc/apache2/conf.d/fqdn

谢谢。使用/ etc / hosts或httpd.conf的修复都没有对我有用,但是确实可以。
瑞安

1
修复了在运行apache2的Ubuntu 13.04上的问题,谢谢!
dmanexe

16

解决该警告的另一种方法是在的127.0.1.1行上放置一个完全限定的域名/etc/hosts。甚至不必是实际上可以解析dns服务器上任何内容的fqdn。

127.0.1.1  hpdtp-ubuntu910.lan  hpdtp-ubuntu910

可以解决问题,同时还能保留所有不期望额外花费的程序的行为.lan。顺序很重要;应该首先指定具有更多级别的名称,如在本示例中,该.lan地址位于另一个地址之前。


7

该解决方案适用于我的开发需求:

背景:

Debian Linux Sid:
VirtualHost开发:我有10个服务器名称(站点内有10个virtualhost条目可用)

我给每个人分配了一个唯一的本地IP地址/etc/hosts

127.0.0.1   joe   localhost.localdomain   localhost
127.0.1.1   joe
127.0.1.2   joomla
127.0.1.3   schmoo
127.0.1.4   forrest
127.0.1.5   store
127.0.1.6   publisher
127.0.1.7   studios
127.0.1.8   drupal
127.0.1.9   graphics
127.0.1.10  wordpress
...

The following lines are desirable for IPv6 capable hosts

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

如果要添加另一个虚拟主机(我有很多要开发的虚拟主机),请向另一个本地主机IP地址添加一个条目,并在重新启动Apache 2.2之前启用该站点:

127.0.0.11 *newhost*

对于要启用为VirtualHost文件的每个条目:

/ etc / apache2 / sites-available /

joe joomla schoo forrest store发行商工作室drupal graphics wordpress

通过a2ensite / a2dissite 主机名启用/禁用所有虚拟主机

抑制错误

重新启动Web服务器:apache2apache2:无法对ServerName使用127.0.0.1可靠地确定服务器的完全限定域名...等待apache2:无法对ServerName使用127.0.0.1可靠地确定服务器的完全限定域名''

在[Debian中的空文件]中编辑httpd.conf/etc/apache2/httpd.conf

ServerName 127.0.1.1

然后解析查找所添加的所有名称,注释掉禁用该行的所有名称。

如果您忘记了:唯一的VirtualHost *:80条目仅需要在ports.conf文件中,

/etc/apache2/ports.conf

**NameVirtualHost *:80**
Listen 80

<IfModule mod_ssl.c>
   # If you add NameVirtualHost *:443 here, you will also have to change
   # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
   # to <VirtualHost *:443>
   # Server Name Indication for SSL named virtual hosts is currently not
   # supported by MSIE on Windows XP.
   Listen 443
</IfModule>

<IfModule mod_gnutls.c>
   Listen 443
</IfModule>

在您的VirtualHost条目中,忽略VirtualHost *:80

示例:virtualhost joe

<VirtualHost *:80>
    **ServerAlias joe**
    **...**
</VirtualHost>


5

您缺少服务器配置级别的ServerName条目。您需要在任何主机之外都有一个ServerName条目,以便Apache用作其默认值。

将ServerName条目放入VirtualHost不会解决此问题。请参阅ServerName指令


3

要对其进行修复,我们需要编辑/etc/apache2/httpd.conf或/etc/apache2.conf并添加以下行:

ServerName nameofserver

1
你是对的!但是,此答案重复了crb答案的内容,而没有提供任何新信息或见解。我会考虑将其删除或添加更多与其他人的答案不同的细节。
罗伊斯·威廉姆斯

1

我相信您需要添加ServerName默认虚拟主机。由于不存在,因此它将使用默认IP地址。这是一种警告。我猜您的Web服务器仍将正常运行。


我不明白你的评论。我的文件中已经有ServerName:<VirtualHost 127.0.0.1:8080> ServerName mysite.localhost请您说明一下吗?

1
对于-default-虚拟主机,不仅限于特定的虚拟主机。
卡齐2011年

0
  1. 您必须使用以下步骤在httpd.conf文件中添加ServerName

    sudo gedit /etc/apache2/httpd.conf
    

    默认情况下,httpd.conf文件将为空白。现在,只需将以下行添加到文件中。

    ServerName localhost
    

    保存文件并从退出gedit。最后重新启动服务器。

    sudo /etc/init.d/apache2 restart
    

2)Include httpd.conf在末尾添加apache2.conf


-1

如果安装后您的etc / apache2目录中不存在httpd.conf文件,则主要的apache配置文件apache2.conf将没有对该文件的引用,因此在创建的httpd.conf中添加任何内容都不会任何东西。您可以简单地将“ ServerName hostname”行添加到apache2.conf文件中。


-1

是/ etc / hosts仍然具有这些条目。(我跳过了上面的一些答案)

127.0.0.1本地主机127.0.0.1 testproject.localhost

这两个IP地址127.0.0.1相同。

从回送ip子网为testproject.localhost提供不同的IP地址。

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.