Чи можу я визначити HTTP та HTTPS в одній VirtualHost у конф. Apache?


13

У мене досить велике визначення VirtualHost, яке я не хочу копіювати, щоб сайт також працював над HTTPS.

Ось що я хочу зробити:

<VirtualHost *>
    ServerName example.com

    <If port=443>
        SSLEngine on
        SSLCertificateFile ...
        SSLCertificateKeyFile ...
        SSLCertificateChainFile ...
    </If>

    (other config)

</VirtualHost>

Чи є спосіб це зробити?
Чи пропускаю я якийсь інший метод не дублювання конфігурації?

Відповіді:


12

Поточна стабільна версія Apache (2.2) не має такої функції, але 2.4 має директиву IF .

Наразі вам доведеться створити два VirtualHosts, але ви можете встановити деякі речі через глобальні змінні середовища або apache і використовувати це у своєму конфігурації virtualhost (наприклад, встановивши рут документа). Таким чином, якщо ви хочете змінити, ви можете зробити це лише за допомогою одного рядка модифікації.

Звичайно, ви можете використовувати include, щоб зробити щось подібне:

<VirtualHost *:80>
        include /etc/apache2/vhost.conf.d/site1
</VirtualHost>

<VirtualHost *:443>
        include /etc/apache2/vhost.conf.d/site1
        include /etc/apache2/vhost.conf.d/site1-ssl
</VirtualHost>

ps: SNI буде головним роком до адаптації IPv6. Весь основний браузер підтримує його, припускаючи, що ви перебуваєте на підтримуваній ОС.

редагувати: як помічено fooquency, ви не можете поставити SSLEngine у ​​блок If, щоб моя відповідь була неправильною.


8
Спроба поставити SSLEngine Onв <If>дасть SSLEngine not allowed here, тому пропонований варіант використання на початку цієї відповіді , до жаль , не представляється можливим. Це, мабуть, пов’язано з тим, що в цьому розділі конфігурації можуть використовуватися лише директиви, що підтримують контекст каталогу. " (ref) і SSLEngineє server config, virtual host (ref) , а не каталог.
fooquency

3

Ні. Більшість речей можна перемістити до глобальної конфігурації та успадкувати її у VirtualHost.


1
На жаль, у мене є декілька VirtualHosts, кожен з яких має різні конфігурації та найбільш потребує роботи над HTTP та HTTPS.
Джейк

1
Настільки корисна, як ця відповідь, вона є єдиною правильною. Перейдіть на веб-сервер, який не смокче. :)
intgr

3

На це відповіли в іншому запитанні. Використовуйте оператор Включити. Працювало як шарм для мене:

Обслуговуйте http (порт 80) і https (порт 443) на тому ж VirtualHost

# Acme Co
<VirtualHost 192.168.56.101:80>
        Include /usr/local/apache2/conf/main-acme.conf
</VirtualHost>

###* SSL
<VirtualHost 192.168.56.101:443>
        Include /usr/local/apache2/conf/main-acme.conf
        SSLEngine On
</VirtualHost>

2

Для віртуальних хостів SSL вам потрібно використовувати другий порт ala

<VirtualHost *:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost *:4443>
    Servername def.com
</VirtualHost>

або вам доведеться використовувати окремі IP-адреси

<VirtualHost 192.168.0.1:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost 192.168.0.2:443>
    Servername def.com
</VirtualHost>

В документах Apache SSL http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html є дуже хороше пояснення.

Знайдіть "Чому я не можу використовувати SSL з віртуальними хостами на основі імен / не-IP?"


2
Будьте в курсі цього на майбутнє, хоча: en.wikipedia.org/wiki/Server_Name_Indication
mattdm

За іронією долі, на той час, коли SNI досить широко прийнятий для безпечного використання для більшості віртуальних хостингових сайтів, IPv6, ймовірно, буде достатньо звичним, щоб зробити його неактуальним.
jgoldschrafe

4
@jgoldschrafe Привіт, 2010! Останні канези показують, що веб-переглядачі, які не належать до СНІ , <2% у всьому світі. З першого світу, мабуть, набагато менше. IPv4 ще живий і
здоровий

2
@kubanczyk Зробив мене! :)
jgoldschrafe

@jgoldschrafe Навіть із IPv6 я б все-таки довіряв SNI над призначенням блоків адрес одній машині, оскільки IP-адреси в основному призначені для маршрутизації, і цим легше керувати.
Бахсау
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.