How to disable http2 in nginx
Asked Answered
C

2

13

due to this Safari Issue with HTTP/2 and Form POSTS I wanted to disable serving one Webpage via HTTP/2. So I just removed the "http2" from the server_name directive in corresponding nginx server block.

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

But after I restarted NginX and opened the website in various browsers the HTTP/2 Protocol is still used... What am I doing wrong?

My NginX version is 1.10.1

Greets Jan

Cawthon answered 12/9, 2016 at 14:45 Comment(2)
Look for http2 in other server blocks.Shepard
There are other server blocks with entabled htt2. Can't I disable it only for one server block?Codicil
C
27

Someone answered with the correct solution here, but the post disappeared...

You have to disable http2 for all server blocks on one IP Adress / Port. If there is one server block configured to enable http2 it is enabled for all server blocks on this IP.

Cawthon answered 13/9, 2016 at 9:46 Comment(4)
Thanks for pointing this out. I just tried that myself, you actually have to disable http2 in all virtual host to disable http2. This actually sucks...Intercostal
This just got me crazy for a while and I have seen this after I solved.Viola
got me crazy too, had to disable http2 for all other vhosts before it points back to http1/1Trigonometry
This can't possibly be true because my server is serving http1.1 on the ip address and h2 on the domain.Diagonal
D
6

NGINX can't serve multiple protocol on 1 port. Make it different port. Example : HTTP/2 on port 443

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

and then HTTP 1.1 on port 444

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

or if you wanna disable http/2 module, re-install NGINX without --with-http_v2_module

Donau answered 25/7, 2017 at 3:17 Comment(1)
This can't possibly be true because my server is serving http1.1 on the ip address and h2 on the domain.Diagonal

© 2022 - 2024 — McMap. All rights reserved.