Apache-2.2
Apache2基於埠的條件部分
我對 apache 配置中的 if 語句了解不多,我想知道是否只有在某個埠上收到請求時才能應用配置的一部分。
簡而言之,這是關於 SSL。我有基於名稱的虛擬主機,我可以為埠 80 進行配置,然後將其全部複製到埠 443,並添加相關的 SSL 配置。
但這似乎是多餘的。我想知道我是否可以有類似的東西:
<VirtualHost *:80 *:443>
然後我可以說:
<IfModule mod_ssl.c> SSLEngine on SSLCertificateFile ... SSLCertificateKeyFile ... SSLCACertificateFile ... </IfModule>
在檢查連接是否在埠 443 上的 if 語句中……或者這樣的事情是不可能的?伺服器支持 SNI,我不擔心不兼容 SNI 的瀏覽器。
是的,從 Apache 2.4 開始,您可以使用
<If "%{HTTPS} == 'on'"> # HTTPS-specific configuration here </If>
在您的配置文件中。
還支持括號內的許多其他表達式
<If "expression">
,例如,按照您的建議實際檢查特定埠。有關更多詳細資訊,請參閱Apache 文件。
<If>
但是,請記住,某些指令在子句中不起作用。檢查指令的允許上下文,其中<If>
算作directory
上下文(如<Directory>
)。