Назад | Перейти на главную страницу

Apache2 ssl + виртуальные хосты того же домена

На моем веб-сервере размещено несколько поддоменов (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, первый имеет приоритет Действие «запуск» не выполнено.

Вам, вероятно, понадобятся три вещи:

  1. А NameVirtualHost *:80 директива. Если вы хотите следовать соглашениям Ubuntu, поместите это в ports.conf.
  2. Исправьте спецификацию хоста на виртуальном хосте SSL по умолчанию. Он установлен на <VirtualHost _default_:443> в конфигурации по умолчанию; он должен соответствовать спецификации слушателя вашего другого vhost и вашего NameVirtualHost директива.
  3. Вам также необходимо указать настройки, связанные с SSL, в вашем новом виртуальном хосте. SSLEngine On и требуются настройки вашего сертификата.

..и если это не так, укажите существующую конфигурацию и вывод apache2ctl -S.