Я мало знаю об операторах 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>
).