Get HTTP/3 to work on nginx

Or: how (not) to set up HTTP/3 on nginx

So, Nginx officially supports HTTP/3 since v1.25.0. Instructions on how to set it up are here . As many other people, I tried to set it up myself. But after following every bit of the documentation I couldn't get it to work. I spent a lot of time to try and get it working, to no avail.

Here I collect some of the reasons for the issue and how I solved them:

10/09/23

I was testing my server to check if it did support TLSv1.3 and this tool left me with an error saying something like:

"your.domain.name <your-ipv6-address> is unreachable"

So, the reason HTTP/3 wasn't working was because the HTTP requests were being tried through IPv6. To double-check, disabling the AAAA record in the DNS, was enough to finally get HTTP/3 to work flawlessly.

26/11/23

Apparently http3 stopped working on nginx for some reason. I investigated for a bit, seemingly not finding the solution. I started tinkering a bit with the settings that should allow you to enable http3. I had this configuration in the default server:

server {
    ...
    listen 443 default_server quic;
    listen 443 ssl reuseport;
    ...

HTTP/3 started working again when I put the reuseport option in the listen directive for quic:

server {
    ...
    listen 443 default_server quic reuseport;
    listen 443 ssl;
    ...

Would you like to give your impressions on this post? Write it online, then paste the link of your response here to send me a Webmention