我可以在Nginx上为特定服务器块(虚拟主机)启用HTTP / 2吗?

我在nginx上有几个虚拟主机.

我是否可以仅在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生成一个不同的进程,该进程在单独的IP:端口组合上没有http2功能.

对于要通过http2访问的虚拟主机,您必须:

>使用不同的端口 – 琐碎,只需为他们使用另一个端口(例如,听8443 ssl http2;)并从所有其他端口中删除http2
(例如`听443 ssl;)
>使用不同的IP – 您需要将另一个IP添加到使用当前IP的同一个NIC并相应地修改您的虚拟主机
(例如,听new_ip:443 ssl http2;并听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;
  ...
}
上一篇:javascript – 如何检测访问者是否使用HTTP / 2或SPDY


下一篇:[翻译]01-ASP.NET MVC 3介绍