Nginx

Så här aktiverar du Brotli-komprimering i Nginx

Så här aktiverar du Brotli-komprimering i Nginx

Brotli-komprimering är en generisk komprimeringsteknik som allmänt stöds i webbläsare. Det är jämförbart med de för närvarande tillgängliga kompressionsmetoderna eftersom det ger 20-26% bättre kompressionsförhållanden. Ändå är det inte bra om inte webbservern skickar komprimerade textbaserade resurser med Brotli-algoritmen.

I den här artikeln lär vi oss hur komprimering fungerar på servern och varför det är användbart? Vi lär oss också att installera Nginx-servern och få vår server att tillhandahålla Brotli-komprimerade filer.

Bakgrund

Komprimeringstekniker / algoritmer förbättrar webbplatsens prestanda genom att minska innehållsstorleken. Följaktligen tar de komprimerade uppgifterna låg belastning och överföringstid. Det har dock ett pris. Servrar använder mycket beräkningsresurser för att ge en bättre komprimeringshastighet. Därför desto bättre, dyra. Så en hel del ansträngningar läggs till för att förbättra komprimeringsformaten samtidigt som man använder minimala CPU-cykler.

Nu var det mest potentiella komprimeringsformatet gzippat. Nyligen har gzip ersatts av en ny komprimeringsalgoritm som kallas Brotli. Det är en avancerad komprimeringsalgoritm som består av Huffman-kodning, L77-algoritmen och kontextmodellering. Däremot bygger Gzip på Deflate-algoritmen.

Det förlustfria komprimeringsformatet, utformat av Google, är nära relaterat till komprimeringsformatet för deflatering. Båda komprimeringsmetoderna använder skjutfönster för referenser till baksidan. Brotlis skjutfönsterstorlek sträcker sig från 1 kB till 16 MB. Däremot har Gzip en fast fönsterstorlek på 32 KB. Det betyder att Brotlis fönster är 512 gånger större än tömningsfönstret, vilket inte är relevant eftersom textfiler större än 32 KB sällan finns på webbservrar.

Serverkomprimeringskompatibilitet är viktigt

När vi laddar ner en fil från webbläsaren, begär webbläsaren servern vilken typ av komprimering den stöder via en rubrik. Till exempel om webbläsaren stöder gzip och tömma luften att dekomprimera. Det kommer att lägga till dessa alternativ i sin Acceptera-kodning, rubrik, jag.e.,

Acceptera-kodning = ”tömma, gzip”

Därför kommer webbläsare som inte stöder dessa format inte att inkludera dem i rubriken. När servern svarar med innehållet berättar den webbläsaren om komprimeringsformatet via en rubrik, Innehållskodning. Därför, om den stöder gzip, ser rubriken ut så här:

Innehållskodning = ”gzip”

Rubriker för webbläsare som Firefox som stöder Brotli-komprimering och webbservern som har en Brotli-modul installerad för att se ut så här:

Acceptera-kodning = ”tömma, gzip, br”
Innehållskodning = ”gzip, br”

Därför, om webbläsaren använder det bästa komprimeringsformatet och webbservern inte gör det, är det inte bra, eftersom webbservern inte skickar tillbaka filerna med den föredragna komprimeringsalgoritmen. Det är därför det är viktigt att installera komprimeringsmodulen för webbservern.

Serverinstallation

Innan vi går vidare med Brotli-konfigurationen kommer vi att ställa in vår Nginx-server. Före det sudo apt-get-uppdatering din Ubuntu-distribution och skriv in följande kommandon i din bash-terminal.

[e-postskyddad]: ~ $ sudo apt-get-uppdatering
[e-postskyddad]: ~ $ sudo apt-get install nginx -y
[e-postskyddad: ~ $ sudo-tjänst nginx start

För att möjliggöra Brotli-komprimering i Nginx kommer vi att sammanställa våra .så moduler enligt våra Nginx-version detaljer. Som visat skriver Nginx-versionen genom att skriva följande kommando:

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

Använd wget kommandot tillsammans med din nginx-versionsdetalj för att ladda ner källkoden från Nginx-webbplatsen.

[e-postskyddad]: ~ $ wget https: // nginx.org / nedladdning / nginx-1.18.0.tjära.gz
--2021-02-07 02: 57: 33-- https: // nginx.org / nedladdning / nginx-1.18.0.tjära.gz
Löser nginx.org (nginx.org) ... 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Ansluter till nginx.org (nginx.org) | 3.125.197.172 |: 443 ... ansluten.
HTTP-begäran skickad, väntar på svar ... 200 OK
Längd: 1039530 (1015K) [application / octet-stream]
Sparar till: 'nginx-1.18.0.tjära.gz '
nginx-1.18.0.tjära.gz 100% [================================================= =====================>] 1015K 220KB / s i 4.8s
2021-02-07 02:57:38 (212 kB / s) - 'nginx-1.18.0.tjära.gz 'sparad [1039530/1039530]

Vi kommer att använda den här källkoden för att kompilera *.så binärer för komprimering av Brotli. Extrahera nu filen med följande kommando.

[e-postskyddad]: ~ $ tar xzf nginx-1.18.0.tjära.gz

Brotli-modulkonfiguration

Nu har Google släppt Brotli-modulen för Nginx. Vi kommer att git-klona modulen från Googles arkiv.

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

Vi ska CD in i nginx-1.18.0 mapp för att konfigurera den dynamiska Brotli-modulen.

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

Obs! Du kan få följande fel när du konfigurerar

./ configure: error: HTTP-omskrivningsmodulen kräver PCRE-biblioteket.
Du kan antingen inaktivera modulen med --without-http_rewrite_module
alternativ, eller installera PCRE-biblioteket i systemet, eller bygg PCRE-biblioteket
statiskt från källan med nginx med --with-pcre = alternativ.

I så fall kör du följande kommando för att installera pcre-biblioteket

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

Modulkompilering

Vi kommer att använda göra kommando för att skapa en moduler mapp inuti nginx-1.18.0-katalog.

[e-postskyddad]: ~ $ sudo skapa moduler

Vi använder cp kommandot att kopiera ngx_http_brotli *.så filer från nginx-1.18.0 / objekt mappen till modulmappen.

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

Lista nu innehållet i filerna med ls kommando. Du kommer att märka att den består av två olika modulfiler, dvs.e.:

[e-postskyddad]: ~ $ ls ngx_http_brotli *.så
ngx_http_brotli_filter_module.så
ngx_http_brotli_static_module.så
  • Vanlig Brotli-modul: Ngx_http_brotli_filter_modulen.så komprimerar modulen alla filer i farten, och därför kräver det mer beräkningsresurser
  • Statisk Brotli-modul: Den ngx_http_brotli_static_module.så modulen tillåter att den serverar förkomprimerade statiska filer, därmed mindre resurskrävande.

Använd nu din favoritredigerare för att öppna / etc / nginx / nginx.conf-fil för att lägga till Brotli-belastningsmoduler för att starta Brotli-konfigurationen genom att inkludera följande rader:

[e-postskyddad]: ~ $ sudo vim / etc / nginx / nginx.konf
# Ladda modulavsnitt
load_module "-moduler / ngx_http_brotli_filter_module.så";
load_module "-moduler / ngx_http_brotli_static_module.så";

Vi kommer också att inkludera sökvägar för konfigurationsmappar / etc / nginx / conf.d / *.konf

och / usr / dela / nginx / moduler / *.konf i ovanstående fil som:

http
# Inkludera konfigurationsmappar
inkludera / etc / nginx / conf.d / *.conf;
inkludera / usr / dela / nginx / moduler / *.conf;

För att lägga till Brotli-konfigurationen, öppna / etc / nginx / conf.d / brotli.konf

filen i vim redigerare och aktivera Brotli genom att ställa in följande konfigurationsdirektiv:

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

brotli off | on”-Värde aktiverar eller inaktiverar dynamisk eller direkt komprimering av innehållet.

'brotli_ statisk på ' gör det möjligt för Nginx-servern att kontrollera om de förkomprimerade filerna med .br-tillägg finns eller inte. Vi kan också göra denna inställning till ett alternativ av eller alltid. De alltid värdet tillåter servern att skicka förkomprimerat innehåll utan att bekräfta om webbläsaren stöder det eller inte. Eftersom Brotli är resurskrävande passar den här modulen bäst för att minska flaskhalssituationer.

brotli_comp_level 6”Direktivet sätter den dynamiska komprimeringskvalitetsnivån till 6. Det kan sträcka sig från 0 till 11.

Slutligen aktivera dynamisk komprimering för specifika MIME-typer, medan text / html-svar alltid komprimeras. Standardsyntaxen för detta direktiv är brotli_types [mime-typ]. Du kan hitta mer om konfigurationsdirektivet på Github.

Spara ändringarna, starta om Nginx-tjänsten genom att skriva “Sudo service restart nginx” och allt är klart.

Slutsats

Efter ändringarna kommer du att märka några uppenbara förbättringar i prestandamätvärdena. Det har dock en liten nackdel med ökad CPU-belastning vid topptider. Håll ett öga på CPU-användningen för att undvika sådana situationer. om den når 100% regelbundet kan vi använda många alternativ enligt våra preferenser, till exempel att presentera förkomprimerat eller statiskt innehåll, sänka kompressionsnivån och stänga av on-the-fly komprimering, bland många.

Mus Lägg till musgester i Windows 10 med dessa gratisverktyg
Lägg till musgester i Windows 10 med dessa gratisverktyg
Under senare år har datorer och operativsystem utvecklats kraftigt. Det fanns en tid då användare var tvungna att använda kommandon för att navigera g...
Mus Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Dual Display Mouse Manager låter dig kontrollera och konfigurera musrörelser mellan flera skärmar genom att sakta ner dess rörelser nära gränsen. Wind...
Mus WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
Om du vill förbättra standardfunktionerna för din muspekare, använd freeware WinMouse. Det lägger till fler funktioner som hjälper dig att få ut det m...