nginx 似乎随机(几乎总是)使用 http2,无论配置如何

nginx 似乎随机(几乎总是)使用 http2,无论配置如何

我刚刚调试了一个网站(使用 Lighthouse 3.2.0),我在 nginx(1.15.9 / 官方 docker 镜像)代理上启用了 http/2,

listen 443 ssl http2;

但是 Lighthouse 仍然说所有资源都是通过 http/1.1 加载的,而我发现几乎所有其他网站(也是通过这个 nginx 代理传送的)都通过了 http2 测试(事实上,h2这些网站的所有资源都是通过 http2 传送的)。

然而,他们所有的聆听诗节肯定只有

listen 443 ssl;

并且整个配置中只有一个站点http2

那么这里可能发生了什么?我更感兴趣的是为什么h2虽然我从未配置过它,但似乎已启用,而不是一个未提供它的站点(这可能是因为在另一端有一个 node.jsproxy_pass或其他东西......)。无论 listen 节如何,新 nginx 版本都是默认设置
http2?我在文档中找不到类似的东西......

答案1

此处讨论:https://stackoverflow.com/questions/40987592/can-i-enable-http-2-for-specific-server-blocks-virtual-hosts-only-on-nginx

基本上,一旦你在一个指令上启用 HTTP/2,listen同一 ip/port 中的所有指令都会获得 HTTP/2。理论上,SNI 允许服务器查看请求的虚拟主机(至少对于 TLSv1 或更高版本上启用 SNI 的客户端),然后使用适合该虚拟主机的 ALPN 设置进行响应,但这很复杂,实际上大多数服务器不会以这种方式区分,而是在该 IP/端口上的所有共享虚拟主机上重复使用相同的 SSL/TLS 设置。

但是,至少在没有更多信息的情况下,我无法解释为什么灯塔认为你的 HTTP/2 vhost 只是 HTTP/1.1。

相关内容