Nginx is a free, open-source, high-performance web server and proxy server used around the world. Brotli is a compression algorithm developed by Google. It can be used as an alternative to other compression methods such as Gzip, Zopfli, and Deflate. By default, Nginx does not support Brotli compression, so you will need to compile Nginx with Brotli support. Brotli works well for the compression of static resources like HTML, JS, CSS, and JSON.
In this tutorial, we will show you how to install the Brotli module with Nginx on Ubuntu 20.04.
Step 1 – Install Required Dependencies
Before starting, you will need to install some dependencies required to compile Nginx in your system. You can install all of them with the following command:
apt-get install dpkg-dev build-essential gnupg2 git gcc cmake libpcre3 libpcre3-dev zlib1g zlib1g- dev openssl libssl-dev curl unzip -y
Once all the packages are installed, you can proceed to the next step.
Step 2 – Add Nginx Repository
Next, you will need to add the Nginx official repository to download the latest version of the Nginx source.
First, import the Nginx GPG key with the following command:
curl -L https://nginx.org/keys/nginx_signing.key | apt-key add -
Next, add the Nginx repository with the following command:
nano /etc/apt/sources.list.d/nginx.list
Add the following lines:
deb http://nginx.org/packages/ubuntu/ focal nginx deb-src http://nginx.org/packages/ubuntu/ focal nginx
Save and close the file when you are finished. Next, update the repository with the following command:
apt-get update -y
Once your repository is updated, you can proceed to the next step.
Step 3 – Install Nginx with Brotli Support
First, download the latest version of the Nginx source with the following command:
cd /usr/local/src apt-get source nginx
Next, install the required dependencies to build Nginx:
apt-get build-dep nginx -y
Next, download the latest version of Brotli from the Git repository using the following command:
git clone --recursive https://github.com/google/ngx_brotli.git
Next, change the directory to the Nginx source and edit the rules file:
cd /usr/local/src/nginx-*/ nano debian/rules
Find the ‘config.env.nginx‘ and ‘config.env.nginx_debug’ section and add the following line within ./configure line:
--add-module=/usr/local/src/ngx_brotli
Save and close the file, then compile and build the nginx package with the following command:
dpkg-buildpackage -b -uc -us
The above command will generate Nginx .deb files inside /usr/local/src directory.
You can list them with the following command:
ls /usr/local/src/*.deb
You should see both files in the following output:
/nginx_1.18.0-2~focal_amd64.deb nginx-dbg_1.18.0-2~focal_amd64.deb
Next, install the Nginx by running the both *.deb file:
dpkg -i /usr/local/src/*.deb
Step 4 – Configure Nginx to Use Brotli
Next, you will need to configure Nginx to use Brotli module. You can do it by editing the Nginx main configuration file:
nano /etc/nginx/nginx.conf
Add the following lines inside the http { section:
brotli on; brotli_comp_level 6; brotli_static on; brotli_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml;
Save and close the file, then verify the Nginx for any syntax errors:
nginx -t
You should get the following output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Next, start the Nginx service using the following command:
systemctl start nginx
You can verify the status of the Nginx service with the following command:
systemctl status nginx
You should get the following output:
-
nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-10-31 06:29:17 UTC; 3s ago Docs: http://nginx.org/en/docs/ Process: 21451 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 21452 (nginx) Tasks: 2 (limit: 4691) Memory: 1.7M CGroup: /system.slice/nginx.service ├─21452 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf └─21453 nginx: worker process
Oct 31 06:29:17 ubuntu2004 systemd[1]: Starting nginx - high performance web server... Oct 31 06:29:17 ubuntu2004 systemd[1]: Started nginx - high performance web server.
Step 5 – Verify Brotli Module
At this point, Nginx is installed and configured with Brotli support. Now, verify whether the Brotli module is enabled or not by running the following command:
curl -H 'Accept-Encoding: br' -I http://localhost
You should get the “Content-Encoding: br” in the following output:
HTTP/1.1 200 OK Server: nginx/1.18.0 Date: Sat, 31 Oct 2020 06:30:24 GMT Content-Type: text/html Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT Connection: keep-alive ETag: W/"5e9efe7d-264" Content-Encoding: br
Conclusion
In the above guide, you learned how to compile Nginx with Brotli support on Ubuntu 20.04. Compared to other compression methods, Brotli compression ratios are up to 26% smaller than current methods, with less CPU usage. Start using Brotli today on dedicated server hosting from Atlantic.Net!