63

尝试启动 Apache 时出现此错误。

_default_ virtualhost 在端口 443 上重叠

我正在尝试设置 SSL。几乎每个在线解决方案都说添加:

NameVirtualHost *:443

到 conf 文件,但 Apache 仍然无法启动,只是说

动作启动失败。apache日志可能有更多信息

Apache 日志中的信息为零。

4

4 回答 4

113

要解决 Debian/Ubuntu 系统上的问题,请/etc/apache2/ports.conf通过添加来修改设置文件NameVirtualHost *:443。我ports.conf目前如下:

# /etc/apache/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

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.

    NameVirtualHost *:443

    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

此外,确保未启用“站点可用/默认 SSL”a2dissite default-ssl ,键入以禁用该站点。当您使用它时a2dissite,自行键入以获取列表,并查看您是否启用了任何其他可能映射到端口 443 的站点设置。

于 2012-07-23T15:06:28.753 回答
33

在 CentOS 中安装 vanilla Apache2 时,当您安装 mod_ssl 时,它会自动在以下位置添加一个配置文件:

{apache_dir}/conf.d/ssl.conf

此配置文件包含端口 443 的默认虚拟主机定义,名为default :443。如果您也有自己的 443 虚拟主机定义(即在 httpd.conf 中),那么您将遇到冲突。由于首先包含 conf.d 文件,因此它们会胜过您的文件。

要解决冲突,您可以从中删除虚拟主机定义conf.d/ssl.conf或将其更新为您自己的设置。

于 2013-04-18T23:42:15.677 回答
13

添加是不太可能NameVirtualHost *:443是正确的解决方案,因为在少数情况下可以通过 SSL 支持基于名称的虚拟主机。阅读thisthis了解一些细节(那里可能有更好的文档;这些只是我发现的详细讨论该问题的文档)。

如果你正在运行一个相对库存的 Apache 配置,你可能在某个地方有这个:

<VirtualHost _default_:443>

您最好的选择是:

  • 将您的附加 SSL 配置放入此现有VirtualHost容器中,或
  • 注释掉整个VirtualHost块并创建一个新块。不要忘记包括所有相关的 SSL 选项。
于 2012-05-18T20:26:27.763 回答
3

我遇到了这个问题,因为我有多个相同端口的通配符条目。您可以通过执行以下命令轻松检查apache2ctl -S

# apache2ctl -S
[Wed Oct 22 18:02:18 2014] [warn] _default_ VirtualHost overlap on port 30000, the first has precedence
[Wed Oct 22 18:02:18 2014] [warn] _default_ VirtualHost overlap on port 20001, the first has precedence
VirtualHost configuration:
11.22.33.44:80       is a NameVirtualHost
         default server xxx.com (/etc/apache2/sites-enabled/xxx.com.conf:1)
         port 80 namevhost xxx.com (/etc/apache2/sites-enabled/xxx.com.conf:1)
         [...]
11.22.33.44:443      is a NameVirtualHost
         default server yyy.com (/etc/apache2/sites-enabled/yyy.com.conf:37)
         port 443 namevhost yyy.com (/etc/apache2/sites-enabled/yyy.com.conf:37)
wildcard NameVirtualHosts and _default_ servers:
*:80                   hostname.com (/etc/apache2/sites-enabled/000-default:1)
*:20001                hostname.com (/etc/apache2/sites-enabled/000-default:33)
*:30000                hostname.com (/etc/apache2/sites-enabled/000-default:57)
_default_:443          hostname.com (/etc/apache2/sites-enabled/default-ssl:2)
*:20001                hostname.com (/etc/apache2/sites-enabled/default-ssl:163)
*:30000                hostname.com (/etc/apache2/sites-enabled/default-ssl:178)
Syntax OK

请注意输出的开头是几条警告行。这些将指示哪些端口正在造成问题(但您可能已经知道)。

接下来,查看输出的末尾,您可以准确地看到虚拟主机定义的哪些文件和行导致了问题。在上面的例子中,端口 20001 被分配在/etc/apache2/sites-enabled/000-default第 33 行和/etc/apache2/sites-enabled/default-ssl第 163 行。同样*:30000在 2 个地方列出。解决方案(在我的情况下)只是删除其中一个条目。

于 2014-10-22T22:28:50.433 回答