我在nginx
上有几个虚拟主机。
我能否仅为特定的虚拟主机启用HTTP/2
?
当我像下面这样为虚拟主机启用HTTP/2
时:
server {
listen 443 ssl http2;
server_name a.b.com;
...
}
我可以通过HTTP2.0访问a.b.com。
但是现在同一台nginx
上的每个其他虚拟主机也支持HTTP/2。
但我只想通过HTTP/1.1
访问它们。
http2
指令是否在服务器级别?
简短回答:在您当前的设置下不可能实现。
在启动时,nginx
首先为每个监听相同 IP:端口 组合的虚拟主机创建一个单独的进程,然后将该进程的能力设置为该组中所有虚拟主机的能力之和。
在您的情况下,只有一个处理绑定到 *:443
的所有虚拟主机的进程,因此该进程包含 http2
能力。
为了实现您想要的功能,您需要使 nginx
生成一个不具备 http2
能力的不同进程,并在单独的 IP:端口 组合上运行。
对于您想要通过 http2
访问的虚拟主机,您必须执行以下操作:
listen 8443 ssl http2;
)并从所有其他端口中删除 http2
(例如 listen 443 ssl;
)listen new_ip:443 ssl http2;
和 listen current_ip:443 ssl;
)多个 IP 的示例配置:
server {
listen current_ip:443 ssl;
server_name http11-host.example.com;
...
}
server {
listen current_ip:443 ssl;
server_name another-http11-host.example.com;
...
}
...
...
server {
listen new_ip:443 ssl http2;
server_name http2-host.example.net;
...
}
server {
listen current_ip:443 ssl http2;
server_name another-http2-host.example.org;
...
}