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 兼容的浏览器没有任何担心。
是的,从 Apache 2.4 开始,您可以使用
<If "%{HTTPS} == 'on'">
# HTTPS-specific configuration here
</If>
Run Code Online (Sandbox Code Playgroud)
在您的配置文件中。
<If "expression">括号内的许多其他表达式也受支持,例如,如您所建议的那样,实际检查特定端口。有关更多详细信息,请参阅Apache 文档。
但是,请记住,某些指令在<If>子句中不起作用。检查指令的允许上下文,其中<If>计为directory上下文(如<Directory>)。