Apache2 基于端口的条件部分

Apache2 基于端口的条件部分

我不太了解 apache 配置中的 if 语句,我想知道是否可以仅在某个端口上收到请求时才应用部分配置。

简而言之,这是关于 SSL 的。我有基于名称的虚拟主机,我可以为端口 80 进行配置,然后将其全部复制到端口 443,并添加相关的 SSL 配置。

但这似乎是多余的。我想知道我是否可以有类似的东西:

<VirtualHost *:80 *:443>

然后我可以输入:

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

在 if 语句中检查连接是否在端口 443 上...或者这是不可能的?该服务器支持 SNI,我不用担心非 SNI 兼容的浏览器。

答案1

是的,从 Apache 2.4 开始,你可以使用

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

在您的配置文件中。

括号内的许多其他表达式<If "expression">也受支持,例如,实际上检查特定端口,正如您所建议的那样。有关更多详细信息,请参阅Apache 文档

但是,请记住,某些指令在子句中不起作用<If>。请检查指令允许的上下文,其中<If>算作上下文directory(例如<Directory>)。

相关内容