当我的 Ubuntu Apache 服务器(Apache 2)启动时,我收到一条警告消息,内容如下:
[warn] NameVirtualHost *:80 has no VirtualHosts
但是,Web 服务器运行正常。我的网站配置可能出了什么问题,导致它发出此警告?
有问题的配置文件(位于/etc/apache2/sites-available
)读起来像(为简洁起见删除了详细信息)
<VirtualHost *>
<Location /mysite>
# Configuration details here...
</Location>
# Use the following for authorization.
<LocationMatch "/mysite/login">
AuthType Basic
AuthName "My Site"
AuthUserFile /etc/sitepasswords/passwd
Require valid-user
</LocationMatch>
</VirtualHost>
我正在使用的事实会<Location>
是问题的一部分吗?
答案1
改变
<VirtualHost *>
读书
<VirtualHost *:80>
或者将其 (NameVirtualHost *:80) 添加两次到 apache2 Confing 文件中。(默认情况下,它添加到 ports.conf 文件中)
这应该可以清除错误。
在旁边:您不应忽略此错误。Apache 的配置,尤其是在通配虚拟主机时(例如包含 /etc/httpd/vhosts.d/*),并不稳定。这意味着您无法明确控制加载主机的顺序,因此 IP 的默认虚拟主机将成为最先加载的虚拟主机,这可能会导致意想不到的后果。
其中一个例子是 IP 的默认虚拟主机也将在该 IP 上可用,而不是其姓名。这可能会导致信息泄露给 Google,而 Google 指的是您网站的 IP 而不是名称,这可能会让客户感到困惑。
上面的 NameVirtualHost 错误可能暗示 apache 以非最佳方式加载了内容,因此您不应忽略它。
答案2
这可能是因为您在多个地方都有 NameVirtualHost 指令。
我不知道其他发行版,但在 Ubuntu/Debian 中,Apache 的配置被分为几个文件,因此你必须检查重复的位置(httpd.conf、apache2.conf、ports.conf、conf.d/*)。
哦,我刚刚发现了这个很棒的资源,里面有更多信息:常见的 Apache 配置错误。
答案3
在 Debian/Lenny 框中:在 /etc/apache2/ports.conf 中有一个额外的 NameVirtualHost 语句 - 这可能是导致此问题的原因(在 /etc/apache2/sites-available/default 中也有相同的语句)。我注释了该语句,错误消失了。
答案4
这是因为您的 NameVirtualHost 行上有一个端口号(:80
),但是您的 VirtualHost 部分没有。