我不太了解 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>
)。