Nginx

Kako omogućiti kompresiju Brotli u Nginxu

Kako omogućiti kompresiju Brotli u Nginxu

Kompresija Brotli je tehnika kompresije generičke namjene široko podržana u svim preglednicima. Usporedljiv je s trenutno dostupnim metodama kompresije jer nudi 20-26% bolje omjere kompresije. Unatoč tome, nije dobro ako web poslužitelj ne šalje komprimirane tekstualne resurse s Brotlijevim algoritmom.

U ovom ćemo članku naučiti kako kompresija djeluje na poslužitelju i zašto je korisna? Također ćemo naučiti instalirati Nginx poslužitelj i dobiti naš poslužitelj za pružanje komprimiranih datoteka Brotli.

Pozadina

Tehnike / algoritmi kompresije poboljšavaju izvedbu web stranice smanjenjem veličine sadržaja. Stoga komprimiranim podacima treba malo opterećenja i vremena prijenosa. Međutim, ima svoju cijenu. Poslužitelji koriste puno računalnih resursa kako bi osigurali bolju stopu kompresije. Dakle, to bolje, skupo. Dakle, dodaje se velik trud za poboljšanje formata kompresije uz korištenje minimalnih ciklusa procesora.

Do sada je gzipiran najoptimalniji format kompresije. Nedavno je gzip zamijenjen novim algoritmom kompresije poznatim kao Brotli. To je napredni algoritam kompresije koji se sastoji od Huffmanovog kodiranja, algoritma L77 i modeliranja konteksta. Suprotno tome, Gzip je izgrađen na algoritmu Deflate.

Format kompresije bez gubitaka, koji je dizajnirao Google, usko je povezan s formatom kompresije ispuhavanja. Obje metode kompresije koriste klizne prozore za povratno referenciranje. Veličina kliznog prozora Brotli kreće se od 1 KB do 16 MB. Suprotno tome, Gzip ima fiksnu veličinu prozora od 32 KB. To znači da je Brotlijev prozor 512 puta veći od prozračnog prozora, što nije važno jer se tekstualne datoteke veće od 32 KB rijetko nalaze na web poslužiteljima.

Kompatibilnost kompresije poslužitelja je važna

Kad god preuzmemo datoteku iz preglednika, preglednik putem zaglavlja traži poslužitelj kakvu kompresiju podržava. Na primjer, ako preglednik podržava gzip i ispuhati dekomprimirati. Te će opcije dodati u svoj Prihvati-kodiraj, zaglavlje, tj.e.,

Accept-Encoding = "ispuhati, gzip"

Stoga ih preglednici koji ne podržavaju ove formate neće uključiti u zaglavlje. Kad poslužitelj odgovori sadržajem, zaglavlju govori pregledniku o formatu kompresije, Kodiranje sadržaja. Dakle, ako podržava gzip, tada zaglavlje izgleda ovako:

Kodiranje sadržaja = "gzip"

Zaglavlja preglednika poput Firefoxa koji podržavaju kompresiju Brotli i web poslužitelja koji imaju instaliran modul Brotli kako bi izgledali ovako:

Accept-Encoding = "ispuhati, gzip, br"
Kodiranje sadržaja = "gzip, br"

Stoga, ako preglednik koristi najbolji format kompresije, a web poslužitelj ne, to nije dobro, jer web poslužitelj neće vratiti datoteke s željenim algoritmom kompresije. Zbog toga je važno instalirati modul kompresije za web poslužitelj.

Instalacija poslužitelja

Prije nego što krenemo naprijed s Brotli konfiguracijom, postavit ćemo naš Nginx poslužitelj. Prije toga sudo apt-get ažuriranje vašu Ubuntu distribuciju i unesite sljedeće naredbe na vašem bash terminalu.

[zaštićena e-poštom]: ~ $ sudo apt-get update
[zaštićena e-poštom]: ~ $ sudo apt-get install nginx -y
[zaštićena e-poštom]: ~ $ sudo service nginx start

Da bismo omogućili Brotlijevu kompresiju u Nginxu, sastavit ćemo našu .dakle moduli prema našim detaljima verzije Nginxa. Kao što je prikazano, upisivanjem sljedeće naredbe dobit ćete Nginx verziju:

[zaštićena e-poštom]: ~ $ nginx -v
nginx verzija: nginx / 1.18.0 (Ubuntu)

Koristiti wget naredbu, zajedno s pojedinostima verzije nginxa za preuzimanje izvornog koda s web stranice Nginx.

[zaštićen e-poštom]: ~ $ wget https: // nginx.org / download / nginx-1.18.0.katran.gz
--2021-02-07 02: 57: 33-- https: // nginx.org / download / nginx-1.18.0.katran.gz
Rješavanje nginxa.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Povezivanje s nginxom.org (nginx.org) | 3.125.197.172 |: 443 ... povezano.
Poslan je HTTP zahtjev, čeka odgovor ... 200 OK
Duljina: 1039530 (1015K) [aplikacija / oktetni tok]
Spremanje u: 'nginx-1.18.0.katran.gz '
nginx-1.18.0.katran.gz 100% [================================================== ====================>] 1015K 220KB / s za 4.8s
2021-02-07 02:57:38 (212 KB / s) - 'nginx-1.18.0.katran.gz 'spremljeno [1039530/1039530]

Koristit ćemo ovaj izvorni kod za sastavljanje *.pa binarne datoteke za Brotlijevu kompresiju. Sada izvucite datoteku pomoću sljedeće naredbe.

[zaštićena e-poštom]: ~ $ tar xzf nginx-1.18.0.katran.gz

Konfiguracija modula Brotli

Sada je Google objavio modul Brotli za Nginx. Git ćemo klonirati modul iz Googleova spremišta.

[e-pošta zaštićena]: ~ $ git clone https: // github.com / google / ngx_brotli --rekurzivno.

Hoćemo CD u nginx-1.18.0 mapa za konfiguriranje dinamičkog modula Brotli.

[e-pošta zaštićena]: ~ $ cd nginx-1.18.0 /
[e-pošta zaštićena]: ~ $ sudo ./ configure --with-compat --add-dynamic-module =… / ngx_brotli

Napomena: Tijekom konfiguriranja možete dobiti sljedeću pogrešku

./ configure: error: modul za prepisivanje HTTP-a zahtijeva PCRE knjižnicu.
Modul možete onemogućiti pomoću --without-http_rewrite_module
ili instalirajte PCRE knjižnicu u sustav ili izgradite PCRE knjižnicu
statički iz izvora s nginxom pomoću --with-pcre = opcija.

U tom slučaju pokrenite sljedeću naredbu da biste instalirali pcre knjižnicu

[zaštićena e-poštom]: ~ $ sudo apt-get install libpcre3-dev -y

Kompilacija modula

Koristit ćemo napraviti naredba za stvaranje a modula mapa unutar nginx-1.18.0 direktorij.

[zaštićena e-poštom]: ~ $ sudo make moduli

Koristimo k.č naredba za kopiranje ngx_http_brotli *.tako datoteke iz nginx-1.18.0 / objs mapu u mapu modula.

[e-pošta zaštićena]: ~ $ cd / nginx-1.18.0 / objs /
[zaštićena e-poštom]: ~ $ sudo cp  ngx_http_brotli *.tako / usr / share / nginx / modules

Sada navedite sadržaj datoteka pomoću ls naredba. Primijetit ćete da se sastoji od dvije različite datoteke modula, tj.e.:

[e-pošta zaštićena]: ~ $ ls ngx_http_brotli *.tako
ngx_http_brotli_filter_module.tako
ngx_http_brotli_static_module.tako
  • Redovni modul Brotli: Modul ngx_http_brotli_filter_filter.tako modul komprimira sve datoteke u hodu, pa stoga zahtijeva više računskih resursa
  • Statički modul Brotli: Ngx_http_brotli_static_module.tako mu modul omogućuje posluživanje prethodno komprimiranih statičkih datoteka, što znači da troši manje resursa.

Sada upotrijebite svoj omiljeni uređivač da biste otvorili / etc / nginx / nginx.conf datoteku za dodavanje modula učitavanja Brotli za započinjanje Brotli konfiguracije uključivanjem sljedećih redaka:

[zaštićen e-poštom]: ~ $ sudo vim / etc / nginx / nginx.konf
# Učitaj odjeljak modula
load_module "moduli / ngx_http_brotli_filter_module.tako";
load_module "moduli / ngx_http_brotli_static_module.tako";

Također ćemo uključiti staze mapa za konfiguraciju / etc / nginx / conf.d / *.konf

i / usr / share / nginx / modules / *.konf u gornjoj datoteci kao što su:

http
# Uključi mape konfiguracija
uključuju / etc / nginx / conf.d / *.conf;
uključuju / usr / share / nginx / modules / *.conf;

Da biste dodali Brotli konfiguraciju, otvorite / etc / nginx / conf.d / brotli.konf

datoteku u vim editor i omogućite Brotli postavljanjem sljedećih konfiguracijskih smjernica:

brotli na;
brotli_static na;
brotli_comp_level 6;
brotli_types aplikacija / rss + xml aplikacija / xhtml + xml
tekst / css tekst / običan;

"brotli off | on"Vrijednost omogućuje ili onemogućava dinamičku ili trenutnu kompresiju sadržaja.

"brotli_ static na ' omogućuje Nginx poslužitelju da provjeri jesu li prethodno komprimirane datoteke s .br proširenja postoje ili ne. Ovu postavku također možemo pretvoriti u opciju isključiti ili stalno. The stalno vrijednost omogućuje poslužitelju slanje prethodno komprimiranog sadržaja bez potvrde podržava li ga preglednik ili ne. Budući da Brotli troši resurse, ovaj je modul najprikladniji za smanjenje uskih grla.

"brotli_comp_level 6”Direktiva postavlja razinu kvalitete dinamičke kompresije na 6. Može se kretati od 0 do 11.

I na kraju, omogućite dinamičko sažimanje za određene MIME vrste, dok se tekst / html odgovori uvijek komprimiraju. Zadana sintaksa ove direktive je brotli_types [mime type]. Više informacija o konfiguracijskoj direktivi možete pronaći na Githubu.

Spremite promjene, ponovno pokrenite Nginx uslugu upisivanjem “Sudo servis restart nginx” i sve je gotovo.

Zaključak

Nakon promjena primijetit ćete očita poboljšanja u mjernim podacima. Međutim, dolazi s blagim nedostatkom povećanog opterećenja procesora u vršnim vremenima. Da biste izbjegli takve situacije, pripazite na upotrebu procesora; ako dosegne 100% redovito, možemo koristiti mnoge opcije prema našim željama, kao što su prikazivanje unaprijed komprimiranog ili statičnog sadržaja, smanjenje razine kompresije i isključivanje kompresije u letu, među mnogim.

Najbolje aplikacije za mapiranje gamepada za Linux
Ako volite igrati igre na Linuxu s gamepadom umjesto tipičnim sustavom za unos tipkovnice i miša, za vas postoji nekoliko korisnih aplikacija. Mnoge r...
Korisni alati za Linux igrače
Ako volite igrati igre na Linuxu, velika je vjerojatnost da ste možda koristili aplikacije i uslužne programe poput Wine, Lutris i OBS Studio za pobol...
HD Remastered igre za Linux koje ranije nisu imale Linux izdanje
Mnogi programeri i izdavači igara dolaze s HD remasterom starih igara kako bi produžili životni vijek franšize, molimo obožavatelje da zatraže kompati...