Недавно я приобрел сертификат SSL для своего основного сайта (https://wemarsh.com/). Он отлично работает, и я даже настроил правило .htaccess, чтобы весь трафик на этом сайте был зашифрован. (Я использую Apache.)
Однако у меня также есть другие сайты на этом же сервере, с тем же IP-адресом. Например, у меня есть блог (http://gallivant.wemarsh.com/). Это прекрасно работает, пока я подключаюсь к незашифрованной версии. Я не хочу включать шифрование для этого сайта, так как знаю, что мой существующий сертификат не включает этот поддомен, и я не хочу платить за дополнительный IP-адрес для этого. Так что все хорошо, если пользователь вводит http://, но если пользователь вводит https:// (по какой-либо причине), появляется предупреждение о том, что сайт является мошенником (как и ожидалось, потому что сертификат неверен). Но если пользователь нажимает, чтобы продолжить, он переносит их на основной сайт, а не в блог на поддомене. Это обстоятельство, которое редко встречается на практике, но я чувствую, что правильное поведение - предупреждать, а затем переходить к правильному "самозванскому" сайту. Или, возможно, мне было бы хорошо, если бы он просто полностью провалился.
Я понимаю некоторые проблемы в игре. Во-первых, я понимаю, что работа с SSL происходит до того, как Apache получает запрос, поэтому обычно нельзя иметь несколько сертификатов на одном IP-адресе. Похоже, что это также мешает мне просто использовать правило .htaccess для переадресации всех на http:// версию сайта (в отличие от того, что я делаю на основном сайте).
Таким образом, я понимаю, что происходит: SSL обрабатывает запрос сертификата, возвращая неверный сертификат в браузер. Браузер блокируется, но позволяет нам продолжить. Тогда Apache не знает, какой URL был запрошен, но знает, что он был на порту 443, поэтому он возвращает основной сайт. Браузер считает, что у него есть блог субдоменов, поэтому он по-прежнему отображает этот URL.
Мои текущие vhosts для основного сайта таковы:
<VirtualHost *:80>
ServerAdmin redacted@wemarsh.com
ServerName www.wemarsh.com
ServerAlias wemarsh.com
DirectoryIndex index.html
DocumentRoot redacted
</VirtualHost>
<VirtualHost *:443>
ServerAdmin redacted@wemarsh.com
ServerName www.wemarsh.com
ServerAlias wemarsh.com
SSLEngine on
SSLCertificateFile redacted
SSLCertificateKeyFile redacted
SSLCertificateChainFile redacted
SSLCACertificateFile redacted
DirectoryIndex index.html
DocumentRoot redacted
</VirtualHost>
Мой текущий vhost для блога поддоменов выглядит так:
<VirtualHost *:80>
ServerAdmin redacted@wemarsh.com
ServerName gallivant.wemarsh.com
DirectoryIndex index.php
DocumentRoot redacted
</VirtualHost>
Я попытался также определить порт 443 в vhosts для субдомена, но это не сработало.
Можно ли сделать то, что я пытаюсь сделать? У кого-нибудь есть решение? В какой-то момент в будущем ситуация станет более сложной, когда я добавлю на сервер дополнительный IP-адрес и еще один сертификат, поэтому имейте это в виду при внесении предложений.
Я полагаю, что провайдеры виртуального хостинга должны как-то это делать, иначе все сайты, не являющиеся https, сломаются, верно?
(Примечание: я намеренно не связан с версией gallivant https. Последнее, что мне нужно, это то, что Google направляет людей на эту ошибку, поэтому, пожалуйста, избегайте ссылок на них в своих ответах.)
Заранее спасибо!