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

Условный раздел Apache2 на основе порта

Я мало знаю об операторах if в конфигурации apache, и мне интересно, могу ли я применить раздел конфигурации только в том случае, если запрос получен на определенном порту.

Короче говоря, это про SSL. У меня есть виртуальные хосты на основе имен, я могу настроить порт 80, затем продублировать все это для порта 443 и добавить соответствующие конфигурации SSL.

Но это кажется лишним. Мне было интересно, могу ли я иметь что-то вроде:

<VirtualHost *:80 *:443>

а затем я могу поставить:

<IfModule mod_ssl.c>
    SSLEngine on
SSLCertificateFile ...
SSLCertificateKeyFile ...
SSLCACertificateFile ...
</IfModule>

внутри оператора if, который проверяет, подключено ли соединение к порту 443 ... или это невозможно? сервер поддерживает SNI, и меня не беспокоят браузеры, не поддерживающие SNI.

Да, начиная с Apache 2.4, вы можете использовать

<If "%{HTTPS} == 'on'">
    # HTTPS-specific configuration here
</If>

в вашем файле конфигурации.

Многие другие выражения внутри <If "expression"> кронштейны также поддерживаются, например фактически проверяет конкретный порт, как вы предложили. Подробнее см. Документы Apache.

Однако имейте в виду, что некоторые директивы не будут работать в <If> пункт. Проверьте допустимые контексты директивы, где <If> считается как directory контекст (например, <Directory>).