【问题标题】:Apache error: _default_ virtualhost overlap on port 443Apache 错误:_default_ virtualhost 在端口 443 上重叠
【发布时间】:2012-05-26 08:18:15
【问题描述】:

我在尝试启动 Apache 时收到此错误。

_default_ virtualhost 在端口 443 上重叠

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

NameVirtualHost *:443

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

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

Apache 日志中的信息为零。

【问题讨论】:

  • 您正在检查哪些日志?如果您使用的是 Linux 系统,请运行 netstat –lp --inet 以查看是否某个进程已在运行并使用端口 443。
  • 不,没有其他东西在使用端口 443。问题是我的 default:443> 和 设置之间的冲突....
  • 注意:我已将 NameVirtualHost 位放在 <IfModule mod_ssl.c> 部分中 - 看起来很合理 - 但它必须在此之外。
  • In 2.3.11 and later,只要在多个虚拟主机中使用 IP 地址和端口组合,就会自动为该地址启用基于名称的虚拟主机。

标签: apache virtualhost


【解决方案1】:

要解决 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>

进一步确保未启用 'sites-available/default-ssl',键入 a2dissite default-ssl 以禁用该站点。当您使用它时,单独键入 a2dissite 以获取列表并查看您是否启用了任何其他可能映射到端口 443 的站点设置。

【讨论】:

  • 嗨@MUYBelgium,这意味着有另一个虚拟主机映射到443端口。查看/etc/apache/sites-enabled/ 或在Debian/Ubuntu 上使用a2dissite 禁用所有站点,然后使用a2ensite 将它们一一启用,直到出现错误;希望这会有所帮助。
  • 是的...我有同样的问题。必须更新 ports.conf 和 sites-avaialble/default-ssl(用 * 替换 default)然后我可以使用 SSL 启用我的其他虚拟主机。应编辑您的答案以包含此附加信息。
  • 非常感谢,添加 NameVirtualHost *:443 解决了问题!用户请注意,在带有 Apache2 的现代 Debian/Ubuntu 中,该文件是 /etc/apache2/ports.conf
  • 那是apache2.2; In 2.3.11 and later,任何时候在多个虚拟主机中使用 IP 地址和端口组合时,都会自动为该地址启用基于名称的虚拟主机。该指令目前无效。
  • 为我工作!我在顶部有NameVirtualHost *:80,但在其他两个地方都没有NameVirtualHost *:443。添加它解决了我的问题。
【解决方案2】:

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

{apache_dir}/conf.d/ssl.conf

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

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

【讨论】:

  • 这是我在 CentOS 上的错误来源,也有助于解释 ssl_mod 无法加载两次的警告。
  • 感谢您的帮助,我有点费力地解码您的答案。注释掉 ssl.conf 中从 default:443> 到 行的所有内容,以使其正常工作。
  • 这是有道理的——对于单个 VH。我在 httpd.conf 中有数百个,我想对它们都应用 SSL。如果我删除 ssl.conf 中的 default:443,然后我必须将其中的所有命令放入 httpd.conf 中的 every VH 定义中,这将肯定是矫枉过正。
  • 谢谢!我正在努力弄清楚为什么我的别名位置指令没有被重定向到端口 443!嘘,这就是问题所在。
  • 正是发生在我身上的事情。拯救了我的一天:)。我最终只是将ssl.conf 文件重命名为ssl.conf-dackup
【解决方案3】:

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

如果您运行的是相对库存的 Apache 配置,您可能在某个地方有这样的配置:

<VirtualHost _default_:443>

您最好的选择是:

  • 将额外的 SSL 配置放入现有的 VirtualHost 容器中,或者
  • 注释掉整个VirtualHost 块并创建一个新块。不要忘记包含所有相关的 SSL 选项。

【讨论】:

  • 嘿,感谢您的建议,但我仍然无法让 apache 工作。 /etc/apache2/sites-available 中有一个 default-ssl 文件,其中包含 default:443> 并且当我在 /etc/apache2/sites-available 中为 mydomain.com 创建一个新文件时并包括 的 SSL 设置,我得到 default vhost 端口 443 重叠错误。当我只有使用新 SSL 设置的 default-ssl 时,当我尝试启动 apache 而错误日志中没有任何内容时,我只是得到一个操作启动失败...我完全陷入困境:(
  • 在再次生成 ssl 并将 default:443> 放入 pache2.conf 文件后,apache 再次启动并且 ssl 正在运行:)
  • “使用 Apache 2.2.12 并支持 SSL 协议的 SNI(服务器名称指示)扩展,您可以配置基于名称的 HTTPS 站点,就像您可以配置基于名称的 HTTP 站点一样。” (techrepublic.com/blog/opensource/…) - 只有旧版本的 Internet Explorer 可能会让您在使用 SSL 时对一个 IP 地址上的多个主机名感到头疼...
  • 如果我将其注释掉并且在我重新启动 Apache 时仍然收到此消息怎么办? grep -r _default_ /etc/httpd/ 只显示我注释掉的虚拟主机。 Apache 是否缓存配置文件?
【解决方案4】:

我遇到了这个问题,因为我有多个用于相同端口的通配符条目。您可以通过执行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 在第 33 行的 /etc/apache2/sites-enabled/000-default 和第 163 行的 /etc/apache2/sites-enabled/default-ssl 中都分配了。同样,*:30000 在 2 个位置列出。解决方案(在我的情况下)只是删除其中一个条目。

【讨论】:

  • 是的,这很有帮助。我在 443 上有一个示例 www.example.com 条目,导致我的所有其他 443 虚拟主机发出错误。
猜你喜欢
  • 2014-02-22
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2014-03-01
  • 2015-05-12
  • 2019-01-11
相关资源
最近更新 更多