Nginx

Slik aktiverer du Brotli-komprimering i Nginx

Slik aktiverer du Brotli-komprimering i Nginx

Brotli-komprimering er en generell komprimeringsteknikk som støttes bredt i nettlesere. Det er sammenlignbart med de tilgjengelige komprimeringsmetodene, da det gir 20-26% bedre kompresjonsforhold. Likevel er det ikke bra med mindre webserveren sender komprimerte tekstbaserte ressurser med Brotli-algoritmen.

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

Bakgrunn

Komprimeringsteknikker / algoritmer forbedrer nettstedets ytelse ved å redusere innholdsstørrelsen. Derfor tar de komprimerte dataene lav belastning og overføringstid. Imidlertid har den en pris. Servere bruker mange beregningsressurser for å gi bedre kompresjonshastighet. Derfor, jo bedre, dyrt. Så det legges en stor innsats for å forbedre komprimeringsformatene mens du bruker minimum CPU-sykluser.

Nå var det mest potensielle kompresjonsformatet gzippet. Nylig er gzip erstattet av en ny komprimeringsalgoritme kjent som Brotli. Det er en avansert komprimeringsalgoritme som består 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 deflatering av komprimeringsformat. Begge komprimeringsmetodene bruker skyvevinduer for referanse på baksiden. Brotli skyvevindusstørrelse varierer fra 1 KB til 16 MB. Derimot har Gzip en fast vindusstørrelse på 32 KB. Det betyr at Brotlis vindu er 512 ganger større enn tømmevinduet, noe som ikke er relevant ettersom tekstfiler større enn 32 KB sjelden er på webservere.

Serverkomprimeringskompatibilitet er viktig

Når vi laster ned en fil fra nettleseren, ber nettleseren serveren om hva slags komprimering den støtter gjennom en topptekst. For eksempel hvis nettleseren støtter gzip og tøm luft å dekomprimere. Det vil legge til disse alternativene i sin Godta-koding, topptekst, jeg.e.,

Accept-Encoding = ”deflate, gzip”

Derfor vil ikke nettlesere som ikke støtter disse formatene 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:

Content-Encoding = ”gzip”

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

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

Derfor, hvis nettleseren bruker det beste komprimeringsformatet og ikke webserveren gjør det, er det ikke bra, siden webserveren ikke vil sende filene tilbake med den foretrukne komprimeringsalgoritmen. Derfor er det viktig å installere komprimeringsmodulen 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-get oppdatering din Ubuntu-distribusjon og skriv inn følgende kommandoer i din bash-terminal.

[e-postbeskyttet]: ~ $ sudo apt-get oppdatering
[e-postbeskyttet]: ~ $ sudo apt-get install nginx -y
[e-postbeskyttet]: ~ $ sudo service nginx start

For å aktivere Brotli-komprimering i Nginx, vil vi kompilere vår .så moduler i henhold til Nginx-versjonsdetaljene. Som vist vil skriving av følgende kommando sende Nginx-versjonen:

[e-postbeskyttet]: ~ $ nginx -v
nginx-versjon: nginx / 1.18.0 (Ubuntu)

Bruke wget kommandoen sammen med nginx-versjonsdetaljene dine for å laste ned kildekoden fra Nginx-nettstedet.

[e-postbeskyttet]: ~ $ 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øser nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Kobler til nginx.org (nginx.org) | 3.125.197.172 |: 443 ... tilkoblet.
HTTP-forespørsel sendt, avventer svar ... 200 OK
Lengde: 1039530 (1015K) [application / octet-stream]
Lagrer til: 'nginx-1.18.0.tjære.gz '
nginx-1.18.0.tjære.gz 100% [================================================= =====================>] 1015K 220KB / s på 4.8s
2021-02-07 02:57:38 (212 KB / s) - 'nginx-1.18.0.tjære.gz 'lagret [1039530/1039530]

Vi bruker denne kildekoden til å kompilere *.så binærfiler for Brotli-komprimering. Pakk ut filen ved hjelp av følgende kommando.

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

Brotli-modulkonfigurasjon

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

[e-postbeskyttet]: ~ $ git-klone https: // github.no / google / ngx_brotli - rekursiv.

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

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

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

./ configure: error: HTTP-omskrivingsmodulen krever PCRE-biblioteket.
Du kan enten deaktivere modulen ved å bruke --without-http_rewrite_module
alternativet, eller installer PCRE-biblioteket i systemet, eller bygg PCRE-biblioteket
statisk fra kilden med nginx ved å bruke --with-pcre = alternativ.

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

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

Modulkompilering

Vi vil bruke gjøre kommando for å lage en moduler mappen inne i nginx-1.18.0 katalog.

[e-postbeskyttet]: ~ $ sudo lage moduler

Vi bruker cp kommando for å kopiere ngx_http_brotli *.så filer fra nginx-1.18.0 / objs mappen til modulmappen.

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

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

[e-postbeskyttet]: ~ $ 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å modul komprimerer alle filene på farten, og dermed krever det mer beregningsressurser
  • Statisk Brotli-modul: Den ngx_http_brotli_static_module.slik at modulen lar den servere forhåndskomprimerte statiske filer, derav mindre ressurskrevende.

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

[e-postbeskyttet]: ~ $ sudo vim / etc / nginx / nginx.konf
# Last modul-delen
load_module "-moduler / ngx_http_brotli_filter_module.så";
load_module "moduler / ngx_http_brotli_static_module.så";

Vi inkluderer også baner for konfigurasjonsmapper / etc / nginx / conf.d / *.konf

og / usr / share / nginx / modules / *.konf i filen ovenfor, for eksempel:

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

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

filen i vim redigerer og aktiver Brotli ved å sette følgende konfigurasjonsdirektiver:

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

brotli av | på”-Verdi aktiverer eller deaktiverer dynamisk komprimering eller innflytelse.

The 'brotli_ statisk på ' gjør det mulig for Nginx-serveren å sjekke om de forhåndskomprimerte filene med .br utvidelser eksisterer eller ikke. Vi kan også gjøre denne innstillingen til et alternativ av eller alltid. De alltid verdien tillater serveren å sende forhåndskomprimert innhold uten å bekrefte om nettleseren støtter det eller ikke. Siden Brotli er ressurskrevende, er denne modulen best egnet til å redusere flaskehalssituasjonene.

brotli_comp_level 6”Direktivet setter det dynamiske kompresjonskvalitetsnivået til 6. Det kan variere fra 0 til 11.

Til slutt, aktiver dynamisk komprimering for bestemte MIME-typer, mens tekst / html-svar alltid er komprimert. Standard syntaksen for dette direktivet er brotli_types [mime type]. Du finner mer om konfigurasjonsdirektivet på Github.

Lagre endringene, start Nginx-tjenesten på nytt ved å skrive “Sudo service restart nginx” og alt er gjort.

Konklusjon

Etter endringene vil du merke noen åpenbare forbedringer i ytelsesberegningene. Imidlertid kommer det med en liten ulempe med økt CPU-belastning i topptider. For å unngå slike situasjoner, hold øye med CPU-bruken; hvis den når 100% regelmessig, kan vi bruke mange alternativer i henhold til våre preferanser, for eksempel å presentere forhåndskomprimert eller statisk innhold, senke kompresjonsnivå og slå av on-the-fly komprimering, blant mange.

Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...
Mus Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
De siste årene har datamaskiner og operativsystemer utviklet seg sterkt. Det var en tid da brukere måtte bruke kommandoer for å navigere gjennom filad...
Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...