Apache错误:_default_虚拟主机在端口443上重叠

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

_default_虚拟主机在端口443上重叠

我正在尝试设置SSL。 几乎所有的在线解决scheme都说:

NameVirtualHost *:443 

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

行动开始失败。 Apache日志可能有更多的信息

Apache日志中有零个信息。

要解决Debian / Ubuntu系统上的问题,可以通过添加NameVirtualHost *:443来修改/etc/apache2/ports.conf设置文件。 目前我的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 (ie 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> 

此外,请确保未启用“sites-available / default-ssl” ,请键入a2dissite default-ssl以禁用该站点。 当你在它的时候,inputa2dissite自己来获取一个列表,看看是否有任何其他的站点设置,你可能会映射到端口443。

在CentOS上的一个vanilla Apache2安装中,当你安装mod_ssl时,它会自动添加一个configuration文件在:

 {apache_dir}/conf.d/ssl.conf 

此configuration文件包含端口443的缺省虚拟主机定义,名称为default :443。 如果你也有自己的虚拟主机定义443(即在httpd.conf),那么你将有一个confict。 由于conf.d文件首先被包括在内,它们将胜过你的。

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

添加NameVirtualHost *:443是非常不可能的,因为可以通过SSL支持基于名称的虚拟主机的情况有限。 阅读这个和这个一些细节(可能有更好的文档,这些只是我发现,详细讨论这个问题)。

如果你正在运行一个相对股票的Apacheconfiguration,你可能有这个地方:

 <VirtualHost _default_:443> 

你最好的select是:

  • 将您的其他SSLconfiguration放入此现有的VirtualHost容器或
  • 注释掉整个VirtualHost块并创build一个新的块。 不要忘记包含所有相关的SSL选项。

我遇到了这个问题,因为我有相同的端口多个通配符条目。 你可以通过执行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 

请注意,在输出开始的时候有几条警告线。 这些将指出哪些端口正在产生问题(不过您可能已经知道)。

接下来,查看输出的结尾,您可以看到正在创build问题的虚拟主机被定义的文件和行。 在上面的例子中,端口20001被分配在第33行的/etc/apache2/sites-enabled/000-default和第163行的/etc/apache2/sites-enabled/default-ssl中。同样, *:30000被列在2个地方。 解决scheme(就我而言)只是删除其中一个条目。