На моем веб-сервере размещено несколько поддоменов (vhosts) веб-сайта, например sub1.example.com и sub2.example.com. Единственная разница между этими vhosts - это корень документа. Все остальное распределяется между vhosts.
Теперь я хотел бы сделать то же самое для HTTPS, но, конечно, ssl + virtualhost - это сложно. Хорошо то, что мой сертификат SSL действителен для всего моего домена. Следовательно, мне не нужно указывать сертификат per-vhosts. Единственное, что я хочу указать для каждого виртуального хоста, - это корень документа.
В Вопросы-Ответы говорит:
Виртуальный хостинг на основе имен - очень популярный метод идентификации различных виртуальных хостов. Это позволяет использовать один и тот же IP-адрес и один и тот же номер порта для множества разных сайтов. Когда люди переходят на SSL, кажется естественным предположить, что один и тот же метод может использоваться для множества разных виртуальных хостов SSL на одном сервере.
Это возможно, но только при использовании веб-сервера 2.2.12 или новее, созданного с использованием OpenSSL версии 0.9.8j или новее. Это связано с тем, что для этого требуется функция, которая добавляется только в самых последних редакциях спецификации SSL, называемая указанием имени сервера (SNI).
Я использую Ubuntu 11.10, который поставляется с Apache 2.2.20 и openssl 1.0.0e, поэтому я думаю, что у меня все должно получиться. Однако я не могу заставить его работать. У меня уже включены сайты default и default-ssl. Если я добавлю виртуальный хост, как это сделал бы для HTTP:
<VirtualHost *:443>
ServerName sub1.example.com
DocumentRoot /var/www/sub1
</VirtualHost>
А затем попробуйте перезапустить Apache, я получаю:
[Чт, 01 марта, 23:55:15 2012] [предупредить] дефолт VirtualHost перекрывается на порте 443, первый имеет приоритет Действие «запуск» не выполнено.
Вам, вероятно, понадобятся три вещи:
NameVirtualHost *:80
директива. Если вы хотите следовать соглашениям Ubuntu, поместите это в ports.conf
.<VirtualHost _default_:443>
в конфигурации по умолчанию; он должен соответствовать спецификации слушателя вашего другого vhost и вашего NameVirtualHost
директива.SSLEngine On
и требуются настройки вашего сертификата...и если это не так, укажите существующую конфигурацию и вывод apache2ctl -S
.