Apache-2.2

Apache2基於埠的條件部分

  • April 6, 2017

我對 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>)。

引用自:https://serverfault.com/questions/519272