HTTP/1.1 opened a handful of connections and sent one request at a time on each, so every extra file cost a queue place. HTTP/2 sends them all over one connection at once, and that single change makes several old optimisations pointless or harmful.

Turn it on

listen 443 ssl;
http2 on;

It requires TLS in every browser, so it comes with the certificate you already have. Nothing else needs to change.

What stops being true

Concatenating every script into one file, and CSS sprites, existed to reduce the NUMBER of requests. Under HTTP/2 that number costs almost nothing - and one big bundle means changing one line invalidates the whole thing for every visitor.
  • Ship several small files that cache independently.
  • Do not shard across domains - it was a way to get more parallel connections and now costs an extra handshake each.
  • Inline only what the first paint truly needs.

HTTP/3

listen 443 quic reuseport;
add_header Alt-Svc 'h3=":443"; ma=86400';

HTTP/3 runs over UDP. Its real gain is on unreliable networks - mobile especially - where one lost packet no longer stalls everything else on the connection.

Check which one you are serving

curl -sI --http2 https://yourdomain.com | head -1\ncurl -sI --http3 https://yourdomain.com | head -1
Neither makes a slow page fast. If TTFB is 900ms the protocol is not the problem, and moving to HTTP/3 will change nothing you can feel.