Ошибка Apache: перекрытие виртуального хоста по умолчанию на порту 443


Я получаю эту ошибку при попытке запустить Apache.

_default_ virtualhost перекрытие на порту 443

Я пытаюсь настроить SSL. Почти каждое решение в интернете говорит добавить:

NameVirtualHost *:443

в файл conf, но Apache все еще не запускается и просто говорит

не удалось запустить действие. журналы apache могут иметь дополнительную информацию

в журналах Apache нет никакой информации.

4 58

4 ответа:

чтобы решить проблему в системе 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.

на установке vanilla Apache2 в CentOS, при установке mod_ssl он автоматически добавит файл конфигурации в:

{apache_dir}/conf.d/ssl.conf

этот файл конфигурации содержит определение виртуального хоста по умолчанию для порта 443 с именем по умолчанию:443. Если у вас также есть собственное определение виртуального хоста для 443 (т. е. в httpd.conf) тогда у вас будет конфикт. После конф.D файлы включены в первую очередь, они выиграют над вашим.

чтобы решить конфликт, вы можете либо удалите определение виртуального хоста из conf.d/ssl.conf или обновить его собственные параметры.

крайне маловероятно, что добавление NameVirtualHost *:443 это правильное решение, потому что существует ограниченное количество ситуаций, в которых можно поддерживать виртуальные хосты на основе имен через SSL. Читайте этой и этой для некоторых деталей (там могут быть лучшие документы; это были только те, которые я нашел, которые подробно обсуждают проблему).

если вы используете относительно фондовую конфигурацию Apache, у вас, вероятно, есть это где-то:

<VirtualHost _default_:443>

ваш лучший выбор-либо:

  • поместите дополнительную конфигурацию SSL в этот существующий VirtualHost контейнер, или
  • прокомментируйте все это VirtualHost заблокируйте и создайте новый. Не забудьте включить все необходимые опции.

я столкнулся с этой проблемой, потому что у меня было несколько подстановочных знаков для одних и тех же портах. Вы можете легко проверить это, выполнив 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

обратите внимание, как в начале выходных пару строк предупреждение. Они укажут, какие порты создают проблемы (однако вы, вероятно, уже знали об этом).

Далее, посмотрите в конце вывода, и вы можете точно увидеть, какие файлы и строки определены virtualhosts, которые создают проблема. В приведенном выше примере порт 20001 назначается как в /etc/apache2/sites-enabled/000-default на линии 33 и /etc/apache2/sites-enabled/default-ssl в строке 163. Аналогичным образом *:30000 перечислено в 2 местах. Решение (в моем случае) было просто удалить одну из записей.