Nginx

Sådan aktiveres Brotli-kompression i Nginx

Sådan aktiveres Brotli-kompression i Nginx

Brotli-kompression er en generisk kompressionsteknik, der bredt understøttes på tværs af browsere. Det kan sammenlignes med de aktuelt tilgængelige kompressionsmetoder, da det giver 20-26% bedre kompressionsforhold. Ikke desto mindre er det ikke godt, medmindre webserveren sender komprimerede tekstbaserede ressourcer med Brotli-algoritmen.

I denne artikel lærer vi, hvordan komprimering fungerer på serveren, og hvorfor er det nyttigt? Vi lærer også at installere Nginx-serveren og få vores server til at levere Brotli-komprimerede filer.

Baggrund

Komprimeringsteknikker / algoritmer forbedrer webstedsydelsen ved at reducere indholdsstørrelsen. Derfor tager de komprimerede data en lav belastning og overførselstid. Det har dog en pris. Servere bruger mange beregningsressourcer til at give en bedre komprimeringshastighed. Derfor er jo bedre, dyre. Så der tilføjes en stor indsats for at forbedre komprimeringsformater, mens du bruger minimale CPU-cyklusser.

På nuværende tidspunkt var det mest potentielle komprimeringsformat gzippet. For nylig er gzip erstattet af en ny komprimeringsalgoritme kendt som Brotli. Det er en avanceret komprimeringsalgoritme, der består af Huffman-kodning, L77-algoritmen og kontekstmodellering. I modsætning hertil er Gzip bygget på Deflate-algoritmen.

Det tabsfri komprimeringsformat, designet af Google, er tæt knyttet til deflate komprimeringsformat. Begge komprimeringsmetoder bruger skydevinduer til tilbagehenvisning. Brotli-skydevinduet varierer fra 1 KB til 16 MB. I modsætning hertil har Gzip en fast vinduesstørrelse på 32 KB. Det betyder, at Brotlis vindue er 512 gange større end deflate-vinduet, hvilket ikke er relevant, da tekstfiler større end 32 KB sjældent findes på webservere.

Serverkomprimeringskompatibilitet er vigtig

Hver gang vi downloader en fil fra browseren, beder browseren serveren om, hvilken slags komprimering den understøtter gennem et header. For eksempel hvis browseren understøtter gzip og tøm luft at dekomprimere. Det tilføjer disse muligheder i sin Accept-kodning, header, jeg.e.,

Accept-Encoding = ”deflate, gzip”

Derfor inkluderer de browsere, der ikke understøtter disse formater, dem ikke i overskriften. Når serveren reagerer med indholdet, fortæller den browseren om komprimeringsformatet gennem en header, Indholdskodning. Derfor, hvis det understøtter gzip, ser overskriften således ud:

Indholdskodning = ”gzip”

Overskrifter på browsere som Firefox, der understøtter Brotli-komprimering, og webserveren, der har et Brotli-modul installeret, ser sådan ud:

Accept-Encoding = ”deflate, gzip, br”
Indholdskodning = ”gzip, br”

Derfor, hvis browseren bruger det bedste komprimeringsformat, og webserveren ikke gør det, er det ikke godt, da webserveren ikke sender filerne tilbage med den foretrukne komprimeringsalgoritme. Derfor er det vigtigt at installere kompressionsmodulet til webserveren.

Serverinstallation

Før vi går videre med Brotli-konfigurationen, opretter vi vores Nginx-server. Inden da sudo apt-get opdatering din Ubuntu-distribution og skriv følgende kommandoer i din bash-terminal.

[e-mail-beskyttet]: ~ $ sudo apt-get opdatering
[e-mail-beskyttet]: ~ $ sudo apt-get install nginx -y
[e-mail beskyttet]: ~ $ sudo service nginx start

For at aktivere Brotli-komprimering i Nginx kompilerer vi vores .så moduler i henhold til vores Nginx-versionoplysninger. Som vist vil indtastning af følgende kommando udskrive Nginx-versionen:

[e-mail-beskyttet]: ~ $ nginx -v
nginx version: nginx / 1.18.0 (Ubuntu)

Brug wget kommando sammen med din nginx-versionsdetalje for at downloade kildekoden fra Nginx-webstedet.

[e-mail-beskyttet]: ~ $ wget https: // nginx.org / download / nginx-1.18.0.tjære.gz
--2021-02-07 02: 57: 33-- https: // nginx.org / download / nginx-1.18.0.tjære.gz
Løser nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Opretter forbindelse til nginx.org (nginx.org) | 3.125.197.172 |: 443 ... tilsluttet.
HTTP-anmodning sendt, afventer svar ... 200 OK
Længde: 1039530 (1015K) [application / octet-stream]
Gemmer 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 'gemt [1039530/1039530]

Vi bruger denne kildekode til at kompilere *.så binærfiler til komprimering af Brotli. Uddrag nu filen ved hjælp af følgende kommando.

[e-mail-beskyttet]: ~ $ tar xzf nginx-1.18.0.tjære.gz

Brotli-modulkonfiguration

Nu har Google frigivet Brotli-modulet til Nginx. Vi klikker modulet fra Google-arkivet.

[e-mail-beskyttet]: ~ $ git-klon https: // github.com / google / ngx_brotli - rekursiv.

Vi vil cd ind i nginx-1.18.0 mappe for at konfigurere det dynamiske Brotli-modul.

[e-mail-beskyttet]: ~ $ cd nginx-1.18.0 /
[e-mail-beskyttet]: ~ $ sudo ./ configure --with-compat --add-dynamic-module =… / ngx_brotli

Bemærk: Du får muligvis følgende fejl under konfiguration

./ configure: fejl: HTTP-omskrivningsmodulet kræver PCRE-biblioteket.
Du kan enten deaktivere modulet ved hjælp af --without-http_rewrite_module
valgmulighed, eller installer PCRE-biblioteket i systemet, eller opret PCRE-biblioteket
statisk fra kilden med nginx ved hjælp af --with-pcre = mulighed.

I så fald skal du køre følgende kommando for at installere pcre-biblioteket

[e-mail-beskyttet]: ~ $ sudo apt-get install libpcre3-dev -y

Modulkompilering

Vi bruger lave kommando til at oprette en moduler mappe inde i nginx-1.18.0-bibliotek.

[email protected]: ~ $ sudo make-moduler

Vi bruger cp kommando til at kopiere ngx_http_brotli *.så filer fra nginx-1.18.0 / objs mappe til modulmappen.

[e-mail-beskyttet]: ~ $ cd / nginx-1.18.0 / objs /
[e-mail-beskyttet]: ~ $ sudo cp  ngx_http_brotli *.så / usr / share / nginx / moduler

Liste nu indholdet af filerne ved hjælp af ls kommando. Du vil bemærke, at den består af to forskellige modulfiler, dvs.e.:

[e-mail-beskyttet]: ~ $ ls ngx_http_brotli *.så
ngx_http_brotli_filter_module.så
ngx_http_brotli_static_module.så
  • Regelmæssigt Brotli-modul: Ngx_http_brotli_filter_modulen.så modul komprimerer alle filerne i farten, og det kræver derfor flere beregningsressourcer
  • Statisk Brotli-modul: Den ngx_http_brotli_static_module.så modul giver det mulighed for at servere forkomprimerede statiske filer, dermed mindre ressourceintensive.

Brug nu din yndlingseditor til at åbne / etc / nginx / nginx.conf-fil for at tilføje Brotli-belastningsmoduler for at starte Brotli-konfiguration ved at inkludere følgende linjer:

[e-mail-beskyttet]: ~ $ sudo vim / etc / nginx / nginx.konf
# Indlæs modulafsnit
load_module "moduler / ngx_http_brotli_filter_module.så";
load_module "moduler / ngx_http_brotli_static_module.så";

Vi inkluderer også stier til konfigurationsmapper / etc / nginx / conf.d / *.konf

og / usr / del / nginx / moduler / *.konf i ovenstående fil såsom:

http
# Inkluder konfigurationsmapper
inkluderer / etc / nginx / conf.d / *.conf;
inkluderer / usr / share / nginx / modules / *.conf;

For at tilføje Brotli-konfigurationen skal du åbne / etc / nginx / conf.d / brotli.konf

fil i vim editor og aktiver Brotli ved at indstille følgende konfigurationsdirektiver:

brotli på;
brotli_static on;
brotli_comp_level 6;
brotli_types application / rss + xml application / xhtml + xml
tekst / css tekst / almindelig;

Det "brotli off | on”-Værdi aktiverer eller deaktiverer dynamisk komprimering eller indflydelse på farten.

Det 'brotli_ statisk på ' gør det muligt for Nginx-serveren at kontrollere, om de forkomprimerede filer med .br-udvidelser findes eller ikke. Vi kan også gøre denne indstilling til en mulighed af eller altid. Det altid værdi tillader serveren at sende forudkomprimeret indhold uden at bekræfte, om browseren understøtter det eller ej. Da Brotli er ressourcekrævende, er dette modul bedst egnet til at reducere flaskehalssituationer.

Det "brotli_comp_level 6”-Direktivet indstiller det dynamiske kompressionskvalitetsniveau til 6. Det kan variere fra 0 til 11.

Til sidst skal du aktivere dynamisk komprimering for bestemte MIME-typer, hvorimod tekst / html-svar altid komprimeres. Standardsyntaxen for dette direktiv er brotli_types [mime type]. Du kan finde mere om konfigurationsdirektivet på Github.

Gem ændringerne, genstart Nginx-tjenesten ved at skrive “Sudo service genstart nginx” og det er gjort.

Konklusion

Efter ændringerne vil du bemærke nogle åbenlyse forbedringer i præstationsmålingerne. Det kommer dog med en lille ulempe ved øget CPU-belastning i spidsbelastningstider. For at undgå sådanne situationer skal du holde øje med CPU-brugen; hvis det når 100% regelmæssigt, kan vi bruge mange muligheder i henhold til vores præferencer, såsom at præsentere prækomprimeret eller statisk indhold, sænke komprimeringsniveauet og deaktivere on-the-fly kompression blandt mange.

Sådan registreres og streames din gaming-session på Linux
Tidligere blev spil kun betragtet som en hobby, men med tiden oplevede spilindustrien en enorm vækst med hensyn til teknologi og antallet af spillere....
Bedste spil at spille med håndsporing
Oculus Quest introducerede for nylig den gode idé om håndsporing uden controllere. Med et stadigt stigende antal spil og aktiviteter, der udfører supp...
Sådan vises OSD-overlay i fuldskærms Linux-apps og -spil
Afspilning af fuldskærmsspil eller brug af apps i distraktionsfri fuldskærmstilstand kan afskære dig fra relevante systemoplysninger, der er synlige i...