_default_ VirtualHost перекрываются на порту 443, первый имеет приоритет

64

У меня два ruby ​​на 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

При поиске, почему эта проблема появляется, я получил что-то вроде этого:

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

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

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

Мохит Джайн
источник
5
У вас нет никаких _default_vhosts в конфигурации, которую вы предоставили, так что они в другом месте. Какой выход apache2ctl -S? (Да, на разных сертификатах можно запускать несколько vhosts на основе имен SSL при условии, что вам не нужно поддерживать клиентские браузеры под управлением Windows XP или другие, не поддерживающие TLS SNI. Требуется ли поддержка Windows ХР?)
Шейн Мэдден

Ответы:

87

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

Добавьте это в 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>
Даниэль Т. Магнуссон
источник
Комментарий «#! Важно! Необходимо удалить или переместить в другую строку. В противном случае, большое спасибо за интерпретацию этого неточного сообщения об ошибке для меня.
flickerfly
3
Это больше не работает в Apache 2.4.7
malhal
Спасибо. Я обнаружил, что мне нужно прокомментировать Listen 443, потому что он также используется в моих личных конфигурациях conf.d / website.conf
dlink
3

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

Роберт
источник
1

Вы можете добавить это к вашей конфигурации 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)

rubo77
источник