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

_default_ VirtualHost перекрывает порт 443, первый имеет приоритет

У меня есть два приложения ruby ​​on rails 3, работающих на одном сервере (ubuntu 10.04), оба с SSL.

Вот мой файл конфигурации apache:

<VirtualHost *:80>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example1/production/shared/example1.crt
SSLCertificateKeyFile /home/me/example1/production/shared/example1.key
SSLCertificateChainFile /home/me/example1/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>


<VirtualHost *:80>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example2/production/shared/iwanto.crt
SSLCertificateKeyFile /home/me/example2/production/shared/iwanto.key
SSLCertificateChainFile /home/me/example2/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>

В чем проблема:

При перезапуске моего сервера он дает примерно такой результат:

 * Restarting web server apache2                                   
 [Sun Jun 17 17:57:49 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
 ... waiting [Sun Jun 17 17:57:50 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence

При поиске в Google, почему возникает эта проблема, я получил примерно следующее:

Вы не можете использовать виртуальные хосты на основе имен с SSL, потому что подтверждение SSL (когда браузер принимает сертификат защищенного веб-сервера) происходит перед HTTP-запросом, который идентифицирует соответствующий виртуальный хост на основе имени. Если вы планируете использовать виртуальные хосты на основе имен, помните, что они работают только с вашим незащищенным веб-сервером.

Но не могу понять, как запустить два ssl-приложения на одном сервере.

Может кто-нибудь помочь мне?

Почти готово!

Добавьте это в ports.conf или http.conf и сохраните указанную выше конфигурацию.

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.

    # !important below!
    NameVirtualHost *:443 
    Listen 443
</IfModule>

Это помогло мне также выполнить "/ usr / sbin / apachectl -S". Эта команда выхода показывает ДВА файла "ssl.conf" по одному и тому же пути. Переместите или удалите файл нарушителя, и после этого все должно работать.

Вы можете добавить это в свою конфигурацию apache по адресу /etc/apache2/ports.conf:

<IfModule mod_ssl.c>                
    Listen 443                      
    <IfModule !mod_authz_core.c>    
        # Apache 2.2                
        NameVirtualHost *:443       
    </IfModule>                     
</IfModule>                         

(Это работает как в apache 2.2, так и в 2.4)