我对 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 "expression">
,例如,按照您的建议实际检查特定端口。有关更多详细信息,请参阅Apache 文档。<If>
但是,请记住,某些指令在子句中不起作用。检查指令的允许上下文,其中<If>
算作directory
上下文(如<Directory>
)。