protocols h2 http/1.1
我想知道,除了添加所有 45 个块之外VirtualHost *:443
,是否有办法检查适当的条件,然后protocols
根据该条件进行设置?我认为,但不能 100% 确定,适当的测试应该是查看请求是否为 https。不过,也许我应该测试端口?
这是我目前得到的,但它不起作用。
Define PROTOCOLS "http/1.1"
<If "%{HTTPS} == 'on'">
Define PROTOCOLS "h2 http/1.1"
</If>
Protocols ${PROTOCOLS}
编辑
Protocols
在目录上下文中不起作用。
编辑2
我只是觉得这不可能,因为Protocols
如果指令是全局定义的,就不能像这样动态修改。服务器已经解析了该指令。它已设置。如果我错了,请纠正我。
答案1
从文档:
协议指令
描述:可用于服务器/虚拟主机的协议
语法:协议协议...
默认:协议 http/1.1
上下文: 服务器配置、虚拟主机
Protocols
允许在服务器配置中使用,而不仅限于虚拟主机。只需在 VirtualHost 之外设置一次,即可为整个服务器设置。然后您可以在 VirtualHost 定义中省略它。
一个非常简单的配置是:
# define defaults
Protocols h2 http/1.1
# single VirtualHost for all HTTP redirects
<VirtualHost *:80>
Protocols http/1.1
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>
# Now all HTTPS VirtualHost definitions
<VirtualHost *:443>
# ...
</VirtualHost>