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

Неправильное приложение загружается на порт 443

У меня есть сервер с двумя веб-приложениями, настроенными следующим образом:

приложение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-адрес.

http://wiki.apache.org/httpd/NameBasedSSLVHosts