Ошибка Apache: перекрытие virtualhost по умолчанию на порту 443
Я получаю эту ошибку при попытке запустить Apache.
_default_ перекрытие virtualhost на порту 443
Я пытаюсь настроить SSL. Почти каждое решение в интернете говорит добавить:
NameVirtualHost *:443
в файл conf, но Apache все еще не запускается и просто говорит
не удалось запустить действие. журналы apache могут иметь больше информации
в журналах Apache нет никакой информации.
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 местах. Решение (в моем случае) было просто удалить одну из записей.