如何在nginx中禁用http2

11

由于这个 Safari问题与HTTP/2和表单POSTS,我想禁用通过HTTP/2提供的一个网页。因此,我只需从相应的nginx服务器块中的server_name指令中删除“http2”即可。

server {
  listen x.x.x.x:443 ssl;
  server_name xxxx;
  [...]
}

但是当我重启 NginX 并在各种浏览器中打开网站时,仍然使用 HTTP/2 协议...我错在哪里了?

我的 NginX 版本是1.10.1

问候Jan


在其他服务器块中查找 http2 - Alexey Ten
有其他启用了HTTP2的服务器块,我不能只为一个服务器块禁用它吗? - Jan Tchärmän
2个回答

27

这里有个人给出了正确的解决方案,但是帖子已经消失了...

你需要禁用一个IP地址/端口上所有服务器块的http2。如果有一个服务器块配置为启用http2,则该IP上的所有服务器块都将启用http2。


6
感谢您指出这一点。我自己尝试了一下,您实际上需要在所有虚拟主机中禁用http2才能禁用http2。这真的很糟糕... - cwhsu
这让我疯狂了一段时间,直到解决后才发现。 - n3storm
让我也疯了,不得不在指向http1/1之前禁用所有其他虚拟主机的http2。 - pvincent
这不可能是真的,因为我的服务器在IP地址上提供http1.1,在域上提供h2。 - Altimus Prime

6

NGINX无法在一个端口上提供多个协议。 请使用不同的端口。 例如:在端口443上使用HTTP/2。

server {
  listen x.x.x.x:443 ssl http2;
  server_name xxxx;
  [...]
}

然后在444端口上使用HTTP 1.1。

 server {
      listen x.x.x.x:444 ssl;
      server_name xxxx;
      [...]
    }

如果你想禁用http/2模块,可以重新安装NGINX,不带--with-http_v2_module选项。


这不可能是真的,因为我的服务器在IP地址上提供http1.1,在域上提供h2。 - Altimus Prime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接