【问题标题】:Can I enable HTTP/2 for specific server blocks (virtual hosts) only, on Nginx?我可以在 Nginx 上仅为特定服务器块(虚拟主机)启用 HTTP/2 吗?
【发布时间】:2017-04-20 15:12:07
【问题描述】:

我在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 指令是在服务器级别吗?

【问题讨论】:

    标签: http nginx http2


    【解决方案1】:

    简短回答:在您当前的设置中不可能。

    启动时,nginx 首先为每组侦听同一 IP:port 组合的虚拟主机创建一个单独的进程,然后将该进程的能力设置为由所述进程处理的该组中每个虚拟主机的所有功能。

    在您的情况下,只有一个进程处理绑定到*:443 的所有虚拟主机,因此该进程包括http2 功能。

    为了实现您想要的,您需要在单独的 IP:port 组合上使 nginx 产生一个不具有 http2 功能的不同进程。

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

    • 使用不同的端口 - 微不足道,只需为他们使用另一个端口(例如listen 8443 ssl http2;)并从所有其他端口中删除http2 (例如,`listen 443 ssl;)
    • 使用不同的 IP - 您需要将另一个 IP 添加到使用您当前 IP 的同一 NIC 并相应地修改您的虚拟主机 (例如 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;
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 2015-09-16
      • 2011-12-18
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2017-04-08
      相关资源
      最近更新 更多