Ошибка Apache: наложение _default_ virtualhost на порт 443
Я получаю эту ошибку при попытке запустить Apache.
_default_ наложение виртуального хоста на порт 443
Я пытаюсь настроить SSL. Почти каждое решение онлайн говорит:
NameVirtualHost *:443
в файл conf, но Apache все еще не запускается и просто говорит
Не удалось запустить действие. журналы apache могут иметь больше информации
В журналах Apache имеется нулевая информация.
Ответы
Ответ 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.
Ответ 2
На ванильном Apache2, установленном в CentOS, при установке mod_ssl он автоматически добавит файл конфигурации в:
{apache_dir}/conf.d/ssl.conf
Этот файл конфигурации содержит определение виртуального хоста по умолчанию для порта 443 с именем по умолчанию: 443. Если у вас также есть собственное определение виртуального хоста для 443 (т.е. В httpd.conf), у вас будет конфликт. Так как файлы conf.d включены в первую очередь, они победят вас.
Чтобы решить конфликт, вы можете либо удалить определение виртуального хоста из conf.d/ssl.conf
, либо обновить его до своих собственных настроек.
Ответ 3
Очень маловероятно, что добавление NameVirtualHost *:443
является правильным решением, поскольку существует ограниченное количество ситуаций, в которых возможно поддерживать виртуальные хосты на основе имен через SSL. Прочтите этот и этот для некоторых деталей (может быть, лучше docs там, это были только те, которые я нашел, которые подробно обсуждали проблему).
Если вы используете относительно запатентованную конфигурацию Apache, у вас, вероятно, есть это где-то:
<VirtualHost _default_:443>
Лучше всего либо:
- Поместите дополнительную конфигурацию SSL в этот существующий контейнер
VirtualHost
или
- Прокомментируйте весь этот блок
VirtualHost
и создайте новый. Не забудьте указать все соответствующие параметры SSL.
Ответ 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 назначается как в /etc/apache2/sites-enabled/000-default
по строке 33, так и /etc/apache2/sites-enabled/default-ssl
на линии 163. Аналогично *:30000
указан в двух местах. Решение (в моем случае) было просто удалить одну из записей.