Ошибка Apache: перекрытие виртуального хоста по умолчанию на порту 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 местах. Решение (в моем случае) было просто удалить одну из записей.