У меня есть сервер с веб-сервером Apache (2.4.25) для нескольких доменов и их поддоменов.
В настоящее время я настроил каждый файл VirtualHost с одинаковой структурой, сгенерировал сертификат SSL для каждого домена / поддомена через certbot. Все мои сайты работают нормально, кроме одного.
VirtualHost (: 80 и: 443 находятся в отдельных файлах)
<VirtualHost domain2.org:80>
ServerName domain2.org
DocumentRoot /var/www/domain2.org
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/.*
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
</VirtualHost>
<VirtualHost domain2.org:443>
ServerName domain2.org
DocumentRoot /var/www/domain2.org
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain2.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain2.org/privkey.pem
</VirtualHost>
Я создал сертификаты с помощью следующей команды:
certbot certonly --webroot --webroot-path /var/www/domain2.org -d domain2.org
Учитывая, что у меня есть следующие домены:
domain1.org
sub.domain1.org
domain2.org
sub.domain2.org
domain3.org
Тогда, когда я хочу навестить domain2.org
с Firefox (59.0.3) я получаю несоответствие сертификата. В нем говорится, что сервер отправляет сертификат для sub.domain1.org
.
Дополнительная информация: sub.domain1.org
это первый файл в каталоге (по алфавиту)
Кто-нибудь знает, что не так с моей конфигурацией или сервером?
Определением вашего виртуального хоста должны быть порты, которые прослушивает apache, а не связанные с доменом. Конкретно этот бит:
<VirtualHost domain2.org:80>
Обычно это либо IP: PORT, либо *: PORT, последнее указывает на то, что вы хотите, чтобы этот виртуальный хост привязывался к любому IP в системе, а не к определенному IP.
Кроме того, это относится к строкам прослушивания, которые у вас есть (в системах на основе debian) /etc/apache2/ports.conf - они будут иметь форму listen 80, listen IP: 80, ваше определение VirtualHost должно соответствовать этому.
Apache, вероятно, разрешает domain2.org на ваш IP-адрес при инициализации, и если ваш DNS не был обновлен или кеш DNS все еще действует, он разрешит неправильный IP-адрес.
Чтобы узнать, какие ip / порты прослушивает apache и какой сервер ServerName определил для каждого виртуального хоста, снова в системах на основе debian вы можете использовать следующую команду:
apache2ctl -S
Краткая форма, вы, вероятно, хотите, чтобы ваше определение VirtualHost как
<VirtualHost *:80>
или
<VirtualHost *:443>
Я предполагаю, что вы используете «достаточно новую» версию OpenSSL, которая поддерживает SNI, технологию, позволяющую использовать несколько сертификатов SSL на одном IP-адресе сервера.