У меня есть сервер с двумя веб-приложениями, настроенными следующим образом:
приложение1:
www.domain1.com
has https version
приложение2:
www.domain1.com
has not https version
Это моя конфигурация VirtualHost для domain1:
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
<VirtualHost --ip--:80>
ServerName www.domain1.com
DocumentRoot /usr/local/ROOT
<Directory /usr/local/ROOT>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from All
</Directory>
errorlog /var/log/httpd/domain1.error.log
CustomLog /var/log/httpd/domain1.access.log common
JkMount /* ajpmc
</VirtualHost>
<VirtualHost --ip--:443>
ServerName www.domain1.com:443
DocumentRoot /usr/local/ROOT
<Directory /usr/local/ROOT>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from All
</Directory>
errorlog /var/log/httpd/domain1.error.log
CustomLog /var/log/httpd/domain1.access.log common
SSLEngine on
SSLCertificateFile "/usr/local/security/paadbox.cert"
SSLCertificateKeyFile "/usr/local/security/paadbox.pem"
JkMount /* ajpmc
</VirtualHost>
Редактировать: А это конфигурация для домена 2:
<VirtualHost --ip--:80>
ServerName www.domain2.com
DocumentRoot /var/www/html/domain2
<Directory /var/www/html/domain2>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from All
</Directory>
errorlog /var/log/httpd/domain2.error.log
CustomLog /var/log/httpd/domain2.access.log common
</VirtualHost>
Учтите, что у меня всего 1 ip.
Эти URL-адреса отлично работают в браузере:
http://www.domain1.com
http://www.domain2.com
https://www.domain1.com
И когда я пытаюсь загрузить этот URL (app2):
https://www.domain2.com
первое приложение (app1) загружается в моем браузере. В чем проблема???
Исторически сложилось так, что у вас может быть только один виртуальный хост SSL на каждый IP-адрес. SNI - указание имени сервера - было разработано для решения этой проблемы.
Хотя теоретически большинство браузеров теперь поддерживают SNI, есть несколько требований, которые должны быть выполнены, чтобы это работало. Вы можете узнать больше об Apache и SNI Вот.
При отсутствии SNI происходит выбор виртуального хоста перед Apache знает виртуальный хост название по запросу клиента. Это означает, что для данного IP-адреса может быть только один виртуальный хост SSL.
Вы можете сделать виртуальный хостинг на основе имени без SNI, если все ваши виртуальные хосты имеют общий домен, потому что тогда вы можете использовать подстановочный SSL-сертификат, который будет действителен для всех из них. Однако похоже, что в вашем случае это не применимо.
В общем, вы не можете сделать виртуальный хостинг на основе имен с использованием SSL просто так.
Каждому SSL VirtualHost нужен один IP-адрес.