基于端口的Apache2条件段

Wal*_*mra 4 ssl virtualhost sni conditional apache-2.2

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

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

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

<VirtualHost *:80 *:443>
Run Code Online (Sandbox Code Playgroud)

然后我可以放:

<IfModule mod_ssl.c>
    SSLEngine on
SSLCertificateFile ...
SSLCertificateKeyFile ...
SSLCACertificateFile ...
</IfModule>
Run Code Online (Sandbox Code Playgroud)

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

黄雨伞*_*黄雨伞 6

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

<If "%{HTTPS} == 'on'">
    # HTTPS-specific configuration here
</If>
Run Code Online (Sandbox Code Playgroud)

在您的配置文件中。

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

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

  • 这是一堆……但不适用于 SSL 指令:SSLEngline、SSLCertificateKeyFile 等在这样的 If 语句中不起作用 (2认同)