Brotli je obecný bezztrátový kompresní algoritmus vyvinutý společností Google jako alternativa k Gzip, Zopfli a Deflate, který komprimuje data pomocí kombinace moderní varianty algoritmu LZ77, Huffmanova kódování a kontextového modelování 2 řádů s kompresním poměrem. srovnatelné s nejlepšími aktuálně dostupnými univerzálními kompresními metodami. Rychlostí je podobná jako s deflate, ale nabízí hustší kompresi.
Brotli je open-source pod licencí MIT.
Nginx nemá oficiální podporu, ale existuje modul třetí strany vyvinutý společností Google s názvem ngx_brotli, který můžete použít k přidání podpory do Nginx.
Tato příručka vám ukáže, jak přidat podporu Brotli na webový server Nginx v systému Debian 10.
POZNÁMKA: Tento průvodce bude používat „johndoe"
jako příklad uživatele a „example.com
" jako příklad domény. Nahraďte je podle svých jmen.
Požadavky
- Server Debian 10 (buster)
- Nginx verze 1.11.5 nebo vyšší
- Název domény s
A
/AAAA
záznamy zřízen - certifikát TLS
Počáteční kroky
Zkontrolujte svou verzi Debianu:
lsb_release -ds
# Debian GNU/Linux 10 (buster)
Nastavte časové pásmo:
sudo dpkg-reconfigure tzdata
Aktualizujte balíčky operačního systému (software). To je nezbytný první krok, protože zajišťuje, že máte nejnovější aktualizace a opravy zabezpečení pro výchozí softwarové balíčky vašeho operačního systému:
sudo apt update && sudo apt upgrade -y
Nainstalujte některé základní balíčky, které jsou nezbytné pro základní správu operačního systému Debian:
sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https
Krok 1 – Nainstalujte Acme.sh a získejte certifikát TLS od společnosti Let's Encrypt
Brotli vyžaduje, abyste nastavili a používali HTTPS. V této části získáme důvěryhodný certifikát od Let's Encrypt.
Stáhněte a nainstalujte Acme.sh:
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc
Zkontrolujte verzi:
acme.sh --version
# v2.8.2
Získejte certifikáty RSA a ECDSA pro example.com:
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength ec-256
Po spuštění výše uvedených příkazů budou vaše certifikáty a klíče v následujících umístěních:
- RSA:
/etc/letsencrypt/example.com
- ECC/ECDSA:
/etc/letsencrypt/example.com_ecc
Krok 2 – Nainstalujte Nginx z oficiálního úložiště Nginx
Stáhněte a nainstalujte nejnovější hlavní řadu Nginx z oficiálního repozitáře Nginx:
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt
Zkontrolujte verzi Nginx:
sudo nginx -v
# nginx version: nginx/1.17.4
Povolte a spusťte službu Nginx:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Krok 3 – Stáhněte a zkompilujte zdrojový kód Brotli
Po instalaci Nginx musíme sestavit modul Brotli (ngx_brotli
) jako dynamický modul Nginx. Od verze Nginx 1.11.5 je možné kompilovat jednotlivé dynamické moduly bez kompilace kompletního softwaru Nginx. V několika následujících krocích vytvoříme modul Brotli jako dynamický bez kompilace kompletního Nginx.
Stáhněte si nejnovější verzi zdrojového kódu Nginx hlavní řady a rozbalte jej:
wget https://nginx.org/download/nginx-1.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz
POZNÁMKA: Je velmi důležité, aby se čísla verzí balíčku Nginx a zdrojového kódu Nginx shodovala. Pokud jste nainstalovali Nginx 1.17.4 z oficiálního úložiště Nginx, musíte si stáhnout stejnou verzi zdrojového kódu , v tomto případě 1.17.4.
Odeberte nginx-1.17.4.tar.gz:
rm nginx-1.17.4.tar.gz
Klonujte ngx_brotli
z GitHubu:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Přejděte do adresáře zdrojového kódu Nginx:
cd ~/nginx-1.17.4
Stáhněte si požadované knihovny:
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
Zkompilujte ngx_brotli
jako dynamický modul a zkopírujte jej do standardního adresáře pro moduly Nginx, /etc/nginx/modules:
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules
Seznam souborů v /etc/nginx/modules
a uvidíte ngx_http_brotli_filter_module.so
a ngx_http_brotli_static_module.so:
ls /etc/nginx/modules
Nastavte oprávnění na 644
pro všechny .so
soubory:
sudo chmod 644 /etc/nginx/modules/*.so
Krok 4 – Konfigurace Nginx
Jsme připraveni nakonfigurovat podporu Brotli v Nginx.
Spusťte sudo vim /etc/nginx/nginx.conf
a přidejte následující dvě direktivy na začátek souboru pro načtení nových modulů Brotli:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Otestujte konfiguraci:
sudo nginx -t
Vytvořte kořenový adresář dokumentu pro example.com
a vytvořte index.html
s nějakým obsahem:
sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit
Vytvořte virtuálního hostitele pro example.com:
sudo vim /etc/nginx/conf.d/example.com.conf
Naplňte jej následující konfigurací:
server {
listen 80;
server_name example.com; # Replace with your domain name
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com; # Replace with your domain name
root /var/www/example.com; # Replace with your document root
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;
brotli on;
brotli_static on;
brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}
Otestujte konfiguraci:
sudo nginx -t
Znovu načtěte Nginx:
sudo systemctl reload nginx.service
Navštivte svůj web ve webovém prohlížeči a otevřete kartu Síť nástrojů pro vývojáře. Zobrazí se Content-Encoding: br
v hlavičkách odpovědí. To je indikátor, že komprese Brotli funguje.
A je to. Na vašem systému Debian 10 jste povolili kompresi Brotli.
Odkazy
- https://brotli.org/
- https://github.com/google/brotli
- https://github.com/google/ngx_brotli
- https://en.wikipedia.org/wiki/Brotli