DEV Community

Mehedi Hasan
Mehedi Hasan

Posted on

How to Enable HTTP/3 on Nginx with Ubuntu

In recent years, HTTP/3 has emerged as the next big thing in web protocols. With faster, more secure connections, HTTP/3 improves the overall performance and user experience of websites. Many website owners in Bangladesh, especially those managing high-traffic sites, are looking for ways to improve their site's speed and reliability. By enabling HTTP/3 on your Nginx server, you can leverage the benefits of this new protocol. In this article, we'll walk you through how to enable HTTP/3 on Nginx running on Ubuntu.

What is HTTP/3?

HTTP/3 is the latest version of the Hypertext Transfer Protocol (HTTP) used for exchanging information between web browsers and servers. Unlike its predecessor (HTTP/2), which uses TCP (Transmission Control Protocol), HTTP/3 is built on top of QUIC, a new transport protocol developed by Google. This shift to QUIC allows for faster page loads, better performance in poor network conditions, and enhanced security.

Prerequisites

Before we start, you need the following:

  • An Ubuntu server (20.04 or higher recommended)
  • Nginx installed on your server
  • A domain name with a valid SSL certificate
  • Root or sudo access to the server

Step 1: Update Your System

Make sure your Ubuntu server is up to date. Run the following commands:

sudo apt update
sudo apt upgrade
Enter fullscreen mode Exit fullscreen mode

Once the system is updated, you’re ready to move forward.

Step 2: Install Nginx with HTTP/3 Support

The default version of Nginx from the official Ubuntu repositories does not support HTTP/3. You need to compile Nginx with HTTP/3 support or install it from a third-party repository that provides a pre-built version.

One option is to use the official Nginx repository, which includes the latest version of Nginx with HTTP/3 support. To do this, first add the Nginx repository:

sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo apt update
Enter fullscreen mode Exit fullscreen mode

Now install Nginx from the added repository:

sudo apt install nginx -y
Enter fullscreen mode Exit fullscreen mode

After the installation, confirm the Nginx version:

nginx -v
Enter fullscreen mode Exit fullscreen mode

You should see a version number indicating the latest mainline release, which includes HTTP/3 support.

Step 3: Install OpenSSL with QUIC and TLS 1.3 Support

HTTP/3 requires QUIC and TLS 1.3 for encryption. You’ll need to ensure that you have a version of OpenSSL that supports these protocols. Install OpenSSL with QUIC support using the following commands:

sudo apt install openssl libssl-dev
Enter fullscreen mode Exit fullscreen mode

Verify the installed OpenSSL version:

openssl version
Enter fullscreen mode Exit fullscreen mode

Make sure that it supports TLS 1.3, which is necessary for HTTP/3.

Step 4: Configure Nginx for HTTP/3

Now that Nginx and OpenSSL are set up, you need to configure Nginx to use HTTP/3.

  1. Edit the Nginx configuration file:

Open your Nginx configuration file in a text editor:

   sudo nano /etc/nginx/nginx.conf
Enter fullscreen mode Exit fullscreen mode
  1. Add HTTP/3 support:

In the configuration file, modify the server block for your site to enable HTTP/3. Below is an example of how to do it:

   server {
       listen 443 ssl http2;
       listen [::]:443 ssl http2;

       listen 443 quic reuseport; # Enable QUIC (HTTP/3)
       listen [::]:443 quic reuseport;

       ssl_protocols TLSv1.3; # Enable TLS 1.3
       ssl_prefer_server_ciphers off;

       # Add the path to your SSL certificate and private key
       ssl_certificate /etc/nginx/ssl/your_domain.crt;
       ssl_certificate_key /etc/nginx/ssl/your_domain.key;
       ssl_certificate /etc/nginx/ssl/your_domain_ecc.crt;
       ssl_certificate_key /etc/nginx/ssl/your_domain_ecc.key;

       ssl_session_cache shared:SSL:10m;
       ssl_session_timeout 1h;
       ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
       ssl_early_data on;

       add_header Alt-Svc 'h3-23=":443"; ma=86400'; # Advertise HTTP/3
       add_header X-Content-Type-Options nosniff;

       location / {
           # Your server configuration
           try_files $uri $uri/ =404;
       }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Enable the necessary Nginx modules:

In order to fully support HTTP/3, enable the necessary modules in Nginx by adding the following lines to your configuration file:

   load_module modules/ngx_http_v3_module.so;
Enter fullscreen mode Exit fullscreen mode
  1. Save and exit:

After making these changes, save the file and exit.

Step 5: Restart Nginx

To apply the changes, restart Nginx with the following command:

sudo systemctl restart nginx
Enter fullscreen mode Exit fullscreen mode

Step 6: Verify HTTP/3 is Enabled

To check if HTTP/3 is enabled on your Nginx server, you can use several methods:

  • Browser Developer Tools: Open your website in Chrome or Firefox, press F12 to open Developer Tools, go to the "Network" tab, and check if the Protocol column shows h3 for HTTP/3.

  • Online Tools: Use online tools like http3check.net or Geekflare HTTP/3 Test to confirm if your site is serving content over HTTP/3.

Conclusion

Enabling HTTP/3 on your Nginx server running on Ubuntu can significantly improve your website's speed, reliability, and security, especially for users on poor network connections. By following the steps outlined in this article, you can take advantage of the latest web protocol to ensure your website performs at its best. Whether you are serving a local audience in Bangladesh or a global user base, HTTP/3 support can provide a smoother browsing experience for everyone.

Top comments (0)