Nginx met Brotli Compressie installeren op Ubuntu 18.04 LTS

Nginx (engine-x) is een open bron hoog-performante HTTP server, reverse proxy en IMAP/POP3 proxy server. De opmerkelijke eigenschappen van Nginx zijn stabiliteit, een rijke functieset, eenvoudige configuratie en laag geheugengebruik.

Brotli is een open bron compressie-algoritme, gemaakt door Google. Brotli geeft betere en verliesvrije compressie dan gzip, en het wordt nu ondersteund door belangrijke browsers en webservers.

Meer over Brotli prestaties:

In deze zelfstudie laat ik je stap-voor-stap zien hoe je ondersteuning voor Brotli compressie algoritme toevoegt aan Nginx webserver. We zullen een aangepast nginx pakket bouwen dat brotli compressie algoritme ondersteunt. We zullen de nieuwste Ubuntu versie gebruiken, plus we zullen een nginx pakket bouwen voor het Debian besturingssysteem.

Vereisten

  • Ubuntu 18.04
  • Root voorrechten

Wat zullen we doen?

  1. Bouw afhankelijkheden installeren
  2. Installeer Nginx met ngx_brotli
    • Voeg Nginx Repository toe
    • Download Nginx en ngx_brotli
    • Bouw Nginx met ngx_brotli ondersteuning
    • Installeer Nginx en schakel ngx_brotli Ondersteuning in
  3. Configureer Nginx Virtuele Host
  4. Testen van

Stap 1 – Bouw afhankelijkheden installeren

Het eerste wat we voor deze gids moeten doen is de build afhankelijkheden op het systeem installeren.

Werk de Ubuntu repository bij en installeer dan alle pakketten build afhankelijkheden met een apt commando hieronder.

sudo apt update
sudo apt install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip

Wacht tot alle pakketten geïnstalleerd zijn.

Stap 2 – Installeer Nginx met ngx_brotli

In deze stap installeren we het aangepaste nginx pakket dat brotli compressie algoritme ondersteunt op het Ubuntu systeem. En we zullen de laatste stabiele versie van het nginx pakket gebruiken dat uit de officiële nginx repository kan worden gedownload.

Nginx Repository toevoegen

Voordat je de nginx repository toevoegt, voeg je het nginx sleutelteken toe met het onderstaande commando.

curl -L https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Maak nu een nieuw nginx repository bestand ‘nginx.list’ aan in de ‘/etc/apt/sources.list.d’ directory met behulp van vim editor.

vim /etc/apt/sources.list.d/nginx.list

Plak er onderstaande configuratie in.

deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx

Bewaar en sluit af.

Werk nu de ubuntu repositories bij.

sudo apt-get update

De Nginx repository is toegevoegd.

Voeg Nginx repository toe

Download Nginx en ngx_brotli bronbestanden

Nu zullen we de Nginx pakketten uit de nginx repository downloaden met het apt commando.

Ga naar de ‘/usr/local/src’ directory en download de Nginx broncode met het onderstaande apt commando.

cd /usr/local/src
sudo apt source nginx

Installeer nu alle benodigde pakketafhankelijkheden voor nginx.

sudo apt build-dep nginx -y

En als alle installatie voltooid is, kloon je de ‘ngx_brotli’ broncode van GitHub.

git clone --recursive https://github.com/google/ngx_brotli.git

Nginx en ngx_brotli zijn gedownload.

Download Nginx en ngx_brotli bronbestanden

Bouw Nginx met ngx_brotli ondersteuning

Nu moeten we de standaard Nginx bouwregel bewerken, we moeten de ngx_brotli toevoegen aan de bouwregel van de pakketten.

Ga naar de ‘/usr/local/src/nginx-*’ directory en bewerk de debian ‘rules’ configuratie.

cd /usr/local/src/nginx-*/
vim debian/rules

Nu krijg je twee bouwomgevingen voor‘config.env.nginx‘ en‘config.env.nginx_debug‘. Voeg de ‘–add-module=’ optie voor ngx_brotli aan beide bouwomgevingen toe.

--add-module=/usr/local/src/ngx_brotli

Sla op en sluit af.

Bouw Nginx met ngx_brotli ondersteuning

En we zijn klaar om het nginx pakket met ngx_brotli ondersteuning te compileren en te bouwen.

Voer het onderstaande dpkg commando uit.

sudo dpkg-buildpackage -b -uc -us

Merk op:

  • -b: Bouw binair-only, geen bronbestanden.
  • -uc : niet-ondertekend .buildinfo en .changes bestand.
  • -us: niet-ondertekend bronpakket.

Als het bouwen voltooid is, krijg je de nginx-*.deb pakketten in de ‘/usr/local/src’ directory zoals hieronder getoond.

ls -lah

Pakketopbouw compleet

Installeer Nginx en schakel Brotli ondersteuning in

De nginx build met ngx_brotli is voltooid, installeer de nginx-*.deb pakketten met het onderstaande dpkg commando.

cd /usr/local/src/
sudo dpkg -i *.deb

Installeer Nginx en schakel Brotli ondersteuning in

Nginx met de ngx_brotli ondersteuning is geïnstalleerd.

Ga nu naar de ‘/etc/nginx’ configuratiedirectory en bewerk het configuratiebestand ‘nginx.conf’.

cd /etc/nginx/
vim nginx.conf

Schakel de ngx_brotli op nginx in door de onderstaande configuratie toe te voegen binnen de ‘http {…}’ sectie.

    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;

Sla op en sluit af.

Nginx configuratie

Test de nginx configuratie en controleer of er geen fout optreedt.

nginx -t

De brotli compressie ondersteuning is ingeschakeld.

Stap 3 – Configureer Nginx Virtuele Host

In deze stap proberen we een nieuwe virtuele host te maken voor de domeinnaam nginx.hakase-labs.io.

Opmerking:

  • Brotli compressie ondersteunt alleen de HTTPS site, dus zorg ervoor dat je de certificaat bestanden voor je domeinnaam hebt, of je kunt gratis Letsencrypt SSL certificaten genereren.

Ga naar de ‘/etc/nginx’ configuratie directory en maak een nieuwe virtuele host configuratie ‘brotli.conf’.

cd /etc/nginx/
vim conf.d/brotli.conf

Plak er de volgende nginx virtuele host configuratie in.

# Redirect HTTP to HTTPS Nginx
server {
   listen 80;
    server_name nginx.hakase-labs.io;
    return 301 https://$host$request_uri;
}

# SSL configuration
server {
    listen 443 ssl http2;
    server_name nginx.hakase-labs.io;
    ssl_certificate /etc/letsencrypt/live/nginx.hakase-labs.io/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nginx.hakase-labs.io/privkey.pem;
  
    # Improve HTTPS performance with session resumption
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    # Enable server-side protection against BEAST attacks
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
        
    # Disable SSLv3
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # web root directory
    location / {
    root /usr/share/nginx/html;
    }

}

Bewaar en sluit af.

Opmerking:

  • Verander de domeinnaam met je eigen domein.
  • Verander het SSL certificaten pad.

Test nu de nginx configuratie en controleer of er geen fout optreedt, herstart dan de dienst.

nginx -t
systemctl restart nginx

De nieuwe nginx virtuele host is toegevoegd.

Stap 4 – Testen

Open je webbrowser en typ de domeinnaam in, de mijne is:

http://nginx.hakase-labs.io

Je wordt nu doorverwezen naar de https verbinding. Klik met rechts op de pagina en klik op‘Inspect Element‘. Klik op het tabblad‘Network‘ en herlaad de pagina.

Klik op het requests detail en je krijgt alle request en response header van de webserver te zien, zoals hieronder.

Nginx testpagina

Op het onderdeel ‘Response headers’ zie je de ‘content-encoding: br’ voor brotli ondersteuning.

Als je nu nog een test wilt doen, kun je het curl commando gebruiken zoals hieronder getoond.

curl -H 'Accept-Encoding: br' -I https://nginx.hakase-labs.io

En je ziet het resultaat ‘content-encoding: br’ voor brotli ondersteuning.

Brotli codering

De Nginx installatie met Brotli Compressie Ondersteuning op Ubuntu 18.04 is met succes voltooid.

Verwijzingen