Hvordan du aktiverer brotli komprimering i nginx

Hvordan du aktiverer brotli komprimering i nginx

Brotli-komprimering er en generisk komprimeringsteknikk som er mye støttet på tvers av nettlesere. Det er sammenlignbart med de tilgjengelige komprimeringsmetodene, da det tilbyr 20-26% bedre kompresjonsforhold. Likevel er det ikke bra med mindre webserveren sender komprimerte tekstbaserte ressurser med Brotli-algoritmen.

I denne artikkelen lærer vi hvordan komprimering fungerer på serveren, og hvorfor er det nyttig? Vi vil også lære å installere Nginx -serveren og få serveren vår til å gi Brotli komprimerte filer.

Bakgrunn

Kompresjonsteknikker/algoritmer forbedrer ytelsen til nettstedet ved å redusere innholdsstørrelsen. Derfor tar komprimerte data en lav belastning og overføringstid. Imidlertid har den en pris. Servere bruker mange beregningsressurser for å gi en bedre kompresjonshastighet. Derfor, jo bedre, desto dyre. Så mye innsats legges til for å forbedre kompresjonsformatene mens du bruker minimum CPU -sykluser.

Nå ble det mest potensielle komprimeringsformatet gzippet. Nylig erstattes Gzip av en ny kompresjonsalgoritme kjent som Brotli. Det er en avansert kompresjonsalgoritme sammensatt av Huffman -koding, L77 -algoritmen og kontekstmodellering. I kontrast er GZIP bygget på Deflate -algoritmen.

Det tapsfrie komprimeringsformatet, designet av Google, er nært beslektet med å avlede komprimeringsformat. Begge kompresjonsmetodene bruker skyvevinduer for referanse til rygg. Brotli glidende vindusstørrelse varierer fra 1 kb til 16MB. I kontrast har GZIP en fast vindusstørrelse på 32kb. Det betyr.

Serverkompresjonskompatibilitet er viktig

Hver gang vi laster ned en fil fra nettleseren, ber nettleseren serveren hva slags kompresjon den støtter gjennom en overskrift. For eksempel, hvis nettleseren støtter Gzip og Deflate å dekomprimere. Det vil legge til disse alternativene i dets Akseptere koding, header, i.e.,

Akseptere-koding = ”Deflate, Gzip”

Derfor vil nettleserne som ikke støtter disse formatene ikke inkludere dem i overskriften. Når serveren svarer med innholdet, forteller den nettleseren om komprimeringsformatet gjennom en overskrift, Innholdskoding. Derfor, hvis den støtter Gzip, ser overskriften slik ut:

Innhold-koding = ”Gzip”

Overskrifter av nettleserne som Firefox som støtter Brotli -komprimering og webserveren som har en Brotli -modul installert for å se slik ut:

Akseptere-koding = ”Deflate, Gzip, BR”
Innhold-koding = ”Gzip, BR”

Derfor, hvis nettleseren bruker det beste komprimeringsformatet og webserveren ikke gjør det, er det ikke bra, ettersom webserveren ikke vil sende tilbake filene med den foretrukne kompresjonsalgoritmen. Derfor er det viktig å installere kompresjonsmodulen for webserveren.

Serverinstallasjon

Før vi går videre med Brotli -konfigurasjonen, vil vi sette opp NGINX -serveren vår. Før det sudo APT-Få oppdatering Ubuntu -distribusjonen din og skriv inn følgende kommandoer i Bash -terminalen.

ubuntu@ubuntu: ~ $ sudo apt-get update
ubuntu@ubuntu: ~ $ sudo apt -get install nginx -y
ubuntu@ubuntu: ~ $ sudo service nginx start

For å aktivere Brotli -komprimering i Nginx, vil vi sammenstille vår .Så moduler i henhold til våre Nginx -versjonsdetaljer. Som vist, skriver du følgende kommando på NGINX -versjonen:

ubuntu@ubuntu: ~ $ nginx -v
nginx versjon: nginx/1.18.0 (Ubuntu)

Bruke WGET Kommando sammen med din Nginx -versjonsdetaljer for å laste ned kildekoden fra Nginx -nettstedet.

ubuntu@ubuntu: ~ $ wget https: // nginx.org/nedlasting/nginx-1.18.0.tjære.gz
--2021-02-07 02: 57: 33-- https: // nginx.org/nedlasting/nginx-1.18.0.tjære.gz
Løsning Nginx.org (nginx.org) ... 3.125.197.172, 52.58.199.22, 2A05: D014: EDB: 5702 :: 6, ..
Koble til Nginx.org (nginx.org) | 3.125.197.172 |: 443 ... tilkoblet.
HTTP -forespørsel sendt, venter på svar ... 200 OK
Lengde: 1039530 (1015k) [Application/Octet-Stream]
Sparer til: 'nginx-1.18.0.tjære.gz '
Nginx-1.18.0.tjære.GZ 100%[=============================================================================== ====================>] 1015K 220KB/s i 4.8s
2021-02-07 02:57:38 (212 kb/s)-'Nginx-1.18.0.tjære.GZ 'Saved [1039530/1039530]

Vi bruker denne kildekoden for å kompilere *.så binærvilder for brotli komprimering. Pakk ut filen ved hjelp av følgende kommando.

ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.tjære.gz

Brotli -modulkonfigurasjon

Nå har Google gitt ut Brotli -modulen for Nginx. Vi vil klone modulen fra Google Repository.

ubuntu@ubuntu: ~ $ git klon https: // github.com/google/ngx_brotli --rekursiv.

Vi vil CD inn i det Nginx-1.18.0 mappe for å konfigurere den dynamiske Brotli -modulen.

ubuntu@ubuntu: ~ $ cd nginx-1.18.0/
ubuntu@ubuntu: ~ $ sudo ./konfigurere-med-kompat-add-dynamic-module =… /ngx_brotli

Merk: Du kan motta følgende feil mens du konfigurerer

./Konfigurer: Feil: HTTP -omskrivningsmodulen krever PCRE -biblioteket.
Du kan enten deaktivere modulen ved å bruke-uten-http_rewrite_module
alternativ, eller installer PCRE -biblioteket i systemet, eller bygg PCRE -biblioteket
Statisk fra kilden med Nginx ved å bruke-med-PCRE = alternativ.

I så fall kjører du følgende kommando for å installere PCRE -biblioteket

ubuntu@ubuntu: ~ $ sudo apt-get install libpcre3-dev -y

Modulsamling

Vi vil bruke gjøre kommando for å opprette en moduler mappe inne i Nginx-1.18.0 Katalog.

ubuntu@ubuntu: ~ $ sudo lage moduler

Vi bruker CP kommando for å kopiere ngx_http_brotli*.så filer fra Nginx-1.18.0/objs mappe til Modules -mappen.

ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/
ubuntu@ubuntu: ~ $ sudo cp ngx_http_brotli*.så /usr/share/nginx/moduler

Liste nå innholdet i filene ved å bruke ls kommando. Du vil merke at den består av to forskjellige modulfiler, i.e.:

ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.så
ngx_http_brotli_filter_module.så
ngx_http_brotli_static_module.så
  • Vanlig Brotli -modul: NGX_HTTP_BROTLI_FILTER_MODULE.Så modulen komprimerer alle filene på farten, og det krever derfor flere beregningsressurser
  • Statisk Brotli -modul: NGX_HTTP_BROTLI_STATIC_MODULE.Så modulen lar den tjene forhåndskomprimerte statiske filer, derav mindre ressurskrevende.

Bruk nå favorittredigereren din til å åpne/etc/nginx/nginx.Conf -fil for å legge til Brotli -lastemoduler for å begynne Brotli -konfigurasjonen ved å inkludere følgende linjer:

ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.konf
# Lastemodulseksjonen
LOAD_MODULE "MODULES/NGX_HTTP_BROTLI_FILTER_MODULE.så";
LOAD_MODULE "MODULES/NGX_HTTP_BROTLI_STATIC_MODULE.så";

Vi vil også inkludere konfigurasjonsmapper stier /etc/nginx/conf.d/*.konf

og /usr/share/nginx/moduler/*.konf I filen ovenfor som:

http
# Inkluderer Configs -mapper
inkluderer/etc/nginx/conf.d/*.Conf;
inkluderer/usr/share/nginx/moduler/*.Conf;

For å legge til Brotli -konfigurasjonen Åpne/etc/nginx/conf.d/brotli.konf

fil i vim Redaktør og aktiver Brotli ved å angi følgende konfigurasjonsdirektiver:

Brotli på;
Brotli_static on;
brotli_comp_level 6;
Brotli_Types Application/RSS+XML Application/XHTML+XML
tekst/CSS tekst/vanlig;

Brotli Off | på”Verdi aktiverer eller deaktiverer dynamikk eller på fluekomprimeringen av innholdet.

'brotli_ statisk på ' gjør det mulig for Nginx-serveren å sjekke om de pre-komprimerte filene med .BR -utvidelser eksisterer eller ikke. Vi kan også gjøre denne innstillingen til et alternativ av eller alltid. De alltid Verdien lar serveren sende pre-komprimert innhold uten å bekrefte om nettleseren støtter det eller ikke. Siden Brotli er ressurskrevende, er denne modulen best egnet til å redusere flaskehalssituasjoner.

Brotli_COMP_LEVEL 6”Direktivet angir det dynamiske kompresjonskvalitetsnivået til 6. Den kan variere fra 0 til 11.

Til slutt, aktiver dynamisk komprimering for spesifikke MIME -typer, mens tekst/HTML -svar alltid er komprimert. Standard syntaks for dette direktivet er brotli_types [mime type]. Du kan finne mer om konfigurasjonsdirektivet på GitHub.

Lagre endringene, start Nginx -tjenesten på nytt ved å skrive “Sudo Service Restart Nginx” Og det hele er gjort.

Konklusjon

Etter endringene vil du legge merke til noen åpenbare forbedringer i resultatmålingene. Imidlertid kommer det med en liten ulempe med økt CPU -belastning på topptider. For å unngå slike situasjoner holder du øye med CPU -bruken; Hvis den når 100% regelmessig, kan vi bruke mange alternativer i henhold til våre preferanser, for eksempel å presentere pre-komprimert eller statisk innhold, senke komprimeringsnivået og slå av på flyet komprimering, blant mange.