Nginx is an open source web server that has won the hearts of many administrators and developers due to its efficient operation, low memory consumption and powerful support for various protocols. Today we will talk about configuring HTTP/2 support in Nginx.

HTTP/2 is an evolution of HTTP protocol that improves data transfer between server and user. It replaced HTTP 1.1, which had a limit on the number of simultaneous connections and therefore slowed down the loading of heavy pages. HTTP/2 solves this problem by allowing concurrent data downloads and compression of HTTP headers.

Why is switching to HTTP/2 important?

Switching to HTTP/2 not only makes your site load faster, but also increases the security of data transfer. All modern browsers require sites to use HTTPS to support HTTP/2, which makes data transfer between the server and visitors more secure.

The process of migration to HTTP/2

Before you start configuring HTTP/2, you must have a server with Ubuntu 18.04 and Nginx installed. Also, your domain name must be pointed to the server, and you must have an SSL certificate (such as Let’s Encrypt) installed for that domain.

1. Server setup

Open your domain’s configuration file:

vim /etc/nginx/sites-available/your_domain

Add HTTP/2 support for IPv6 and IPv4 connections:

listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;

Save the changes and check the syntax:

nginx -t

2. Improvement of security

To improve security, exclude insecure ciphers. In your domain configuration file, change the ssl_ciphers option:


Check the syntax and restart the server:

nginx -t
systemctl restart nginx.service

3. Adding HTTP Strict Transport Security (HSTS)

For even more security, add the HTTP Strict Transport Security header to your Nginx configuration file. This header ensures that browsers will only use HTTPS connections.

In the Nginx configuration file:

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

Check the syntax and restart the server.

4. Checking correct operation of HTTP/2

You can verify that HTTP/2 is working by using the curl command:

curl -I -L https://your_domain

There should be a mention of HTTP/2 in the server response.

You can also use Google Chrome and developer tools to check for HTTP/2 support.

Now your website is ready to work with HTTP/2 – a faster and more secure version of the HTTP protocol! 🚀🔒

Don’t forget to always keep your server up to date and secure. Good luck! 🌐

Read also:


What are the advantages of using HTTP/2 over HTTP/1.1?

HTTP/2 offers several advantages, including improved performance through features like multiplexing and header compression, enhanced security with built-in encryption support, and better support for modern web technologies.

Is it necessary to enable SSL/TLS when configuring HTTP/2 support?

Yes, enabling SSL/TLS is crucial when configuring HTTP/2 support to ensure secure communication between clients and the server. SSL/TLS encryption protects sensitive data from interception and tampering.

Can I configure HTTP/2 support on older versions of Ubuntu?

While it’s technically possible to configure HTTP/2 support on older versions of Ubuntu, such as 16.04, it’s recommended to use Ubuntu 18.04 or newer for optimal compatibility and support.

How can I verify if HTTP/2 is enabled on my Nginx server?

You can verify if HTTP/2 is enabled on your Nginx server by using tools like curl or online HTTP/2 testing services. Additionally, examining your Nginx server logs can provide insights into the protocol version used by client connections.

Does enabling HTTP/2 support require additional server resources?

Enabling HTTP/2 support may require slightly more server resources compared to HTTP/1.1 due to increased protocol complexity. However, the performance benefits typically outweigh the minimal resource overhead.

Can I revert to HTTP/1.1 if needed after configuring HTTP/2 support?

Yes, you can revert to HTTP/1.1 if necessary by adjusting your Nginx configuration settings. However, it’s recommended to thoroughly test your website’s compatibility and performance before making any changes.

About the Author

Andrii Kostashchuk

Andrii has experience in programming in various languages for different platforms and systems. He has spent more than 8 years in the Internet sphere, working with various CMS, such as: Opencart, Drupal, Joomla, and of course, the most popular content management system WordPress.

View All Articles