Nginx

Hoe Brotli-compressie in Nginx in te schakelen

Hoe Brotli-compressie in Nginx in te schakelen

Brotli-compressie is een compressietechniek voor algemeen gebruik die breed wordt ondersteund in alle browsers. Het is vergelijkbaar met de momenteel beschikbare compressiemethoden omdat het 20-26% betere compressieverhoudingen biedt. Desalniettemin heeft het geen zin, tenzij de webserver gecomprimeerde op tekst gebaseerde bronnen verzendt met het Brotli-algoritme.

In dit artikel zullen we leren hoe compressie in de server werkt en waarom het nuttig is? We zullen ook leren om de Nginx-server te installeren en onze server Brotli-gecomprimeerde bestanden te laten leveren.

Achtergrond

Compressietechnieken/-algoritmen verbeteren de prestaties van de website door de inhoud te verkleinen. Daarom hebben de gecomprimeerde gegevens een lage laad- en overdrachtstijd. Het heeft echter een prijs. Servers gebruiken veel computerbronnen om een ​​betere compressiesnelheid te bieden. Vandaar, hoe beter, hoe duurder. Er wordt dus veel moeite gedaan om de compressie-indelingen te verbeteren en tegelijkertijd minimale CPU-cycli te gebruiken.

Inmiddels was het meest potentiële compressieformaat gezipt. Onlangs is gzip vervangen door een nieuw compressie-algoritme dat bekend staat als Brotli. Het is een geavanceerd compressiealgoritme dat is samengesteld uit Huffman-codering, het L77-algoritme en contextmodellering. Daarentegen is Gzip gebouwd op het Deflate-algoritme.

Het lossless compressieformaat, ontworpen door Google, is nauw verwant aan deflate compressieformaat. Beide compressiemethoden gebruiken schuifvensters voor terugverwijzingen. De grootte van het Brotli schuifraam varieert van 1 KB tot 16 MB. Daarentegen heeft Gzip een vaste venstergrootte van 32KB. Dat betekent dat het venster van Brotli 512 keer groter is dan het deflate-venster, wat niet relevant is omdat tekstbestanden groter dan 32 KB zelden op webservers staan.

Compatibiliteit met servercompressie is belangrijk

Telkens wanneer we een bestand downloaden van de browser, vraagt ​​de browser de server wat voor soort compressie het ondersteunt via een header. Als de browser bijvoorbeeld gzip en leeglopen decomprimeren. Het zal deze opties toevoegen in zijn Accepteren-codering, kop, ik.e.,

Accept-Encoding=”deflate, gzip”

Daarom zullen de browsers die deze formaten niet ondersteunen ze niet in de koptekst opnemen. Wanneer de server reageert met de inhoud, vertelt het de browser over het compressieformaat via een header, Inhoud-codering. Dus als het gzip ondersteunt, ziet de header er als volgt uit:

Content-Encoding=”gzip”

Headers van browsers zoals Firefox die Brotli-compressie ondersteunen en de webserver waarop een Brotli-module is geïnstalleerd, zien er als volgt uit:

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

Dus als de browser het beste compressieformaat gebruikt en de webserver niet, is het niet goed, omdat de webserver de bestanden niet terugstuurt met het geprefereerde compressie-algoritme. Daarom is het belangrijk om de compressiemodule voor de webserver te installeren.

Serverinstallatie

Voordat we verder gaan met de Brotli-configuratie, zullen we onze Nginx-server instellen. Daarvoor sudo apt-get update uw Ubuntu-distributie en typ de volgende opdrachten in uw bash-terminal:.

[e-mail beveiligd]:~$ sudo apt-get update
[e-mail beveiligd]:~$ sudo apt-get install nginx -y
[email protected]:~$ sudo service nginx start

Om Brotli-compressie in de Nginx mogelijk te maken, compileren we onze .dus modules volgens onze Nginx-versiedetails. Zoals getoond, zal het typen van de volgende opdracht de Nginx-versie uitvoeren:

[e-mail beveiligd]:~$ nginx -v
nginx-versie: nginx/1.18.0 (Ubuntu)

Gebruik de wget commando samen met uw nginx-versiedetail om de broncode van de Nginx-website te downloaden.

[e-mail beveiligd]:~$ wget https://nginx.org/download/nginx-1.18.0.teer.gz
--2021-02-07 02:57:33--  https://nginx.org/download/nginx-1.18.0.teer.gz
Nginx oplossen.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6,…
Verbinding maken met nginx.org (nginx.org)|3.125.197.172|:443… verbonden.
HTTP-verzoek verzonden, in afwachting van antwoord... 200 OK
Lengte: 1039530 (1015K) [applicatie/octet-stream]
Opslaan naar: 'nginx-1.18.0.teer.gz'
nginx-1.18.0.teer.gz             100%[============================================== ====================>]   1015K   220KB/s in 4.8s
2021-02-07 02:57:38 (212 KB/s) - 'nginx-1.18.0.teer.gz' opgeslagen [1039530/1039530]

We zullen deze broncode gebruiken om *.dus binaire bestanden voor Brotli-compressie. Pak het bestand nu uit met de volgende opdracht:.

[e-mail beveiligd]:~$ tar xzf nginx-1.18.0.teer.gz

Configuratie Brotli-module

Nu heeft Google de Brotli-module voor Nginx uitgebracht. We zullen de module git-klonen vanuit de Google-repository.

[e-mail beveiligd]:~$ git clone https://github.com/google/ngx_brotli --recursief.

Wij zullen CD in de nginx-1.18.0 map om de dynamische Brotli-module te configureren.

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

Opmerking: u kunt tijdens het configureren de volgende foutmelding krijgen:

./configure: error: de HTTP-herschrijfmodule vereist de PCRE-bibliotheek.
U kunt de module uitschakelen door --without-http_rewrite_module . te gebruiken
optie, of installeer de PCRE-bibliotheek in het systeem, of bouw de PCRE-bibliotheek
statisch van de bron met nginx door --with-pcre= . te gebruiken keuze.

Voer in dat geval de volgende opdracht uit om de pcre-bibliotheek te installeren:

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

Module-compilatie

We zullen de gebruiken maken opdracht om een ​​. te maken modules map in de nginx-1.18.0 map.

[email protected]:~$ sudo make modules

Wij gebruiken de cp commando om te kopiëren ngx_http_brotli*.zo bestanden van de nginx-1.18.0/objs map naar de map modules.

[e-mail beveiligd]:~$ cd /nginx-1.18.0/objs/
[e-mail beveiligd]:~$ sudo cp  ngx_http_brotli*.zo /usr/share/nginx/modules

Maak nu een lijst van de inhoud van de bestanden met behulp van de ls opdracht. U zult merken dat het uit twee verschillende modulebestanden bestaat, i.e.:

[e-mail beveiligd]:~$ ls ngx_http_brotli*.zo
ngx_http_brotli_filter_module.zo
ngx_http_brotli_static_module.zo
  • Reguliere Brotli-module: De ngx_http_brotli_filter_module.dus module comprimeert alle bestanden on-the-fly, en daarom vereist het meer rekenbronnen
  • Statische Brotli-module: De ngx_http_brotli_static_module.dus module maakt het mogelijk om vooraf gecomprimeerde statische bestanden te serveren, dus minder resource-intensief.

Gebruik nu uw favoriete editor om de /etc/nginx/nginx . te openen.conf-bestand om Brotli-laadmodules toe te voegen om de Brotli-configuratie te starten door de volgende regels op te nemen:

[e-mail beveiligd]:~$ sudo vim /etc/nginx/nginx.conf
# Laad module sectie
load_module "modules/ngx_http_brotli_filter_module".zo";
load_module "modules/ngx_http_brotli_static_module".zo";

We zullen ook paden voor configuratiemappen opnemen /etc/nginx/conf.d/*.conf

en /usr/share/nginx/modules/*.conf in het bovenstaande bestand zoals:

http
# Inclusief configuratiemappen
inclusief /etc/nginx/conf.d/*.conf;
inclusief /usr/share/nginx/modules/*.conf;

Om de Brotli-configuratie toe te voegen, opent u de /etc/nginx/conf.d/brotli.conf

bestand in de vim editor en schakel Brotli in door de volgende configuratierichtlijnen in te stellen:

brotli     op;
brotli_static        aan;
brotli_comp_level          6;
brotli_types         applicatie/rss+xml applicatie/xhtml+xml
tekst/css tekst/plat;

De "brotli uit|aan” waarde schakelt dynamische of directe compressie van de inhoud in of uit.

De 'brotli_ statisch aan' stelt de Nginx-server in staat om te controleren of de voorgecomprimeerde bestanden met de .br extensies bestaan ​​of niet. We kunnen van deze instelling ook een optie maken uit of altijd. De altijd waarde stelt de server in staat om vooraf gecomprimeerde inhoud te verzenden zonder te bevestigen of de browser dit ondersteunt of niet. Omdat Brotli veel middelen nodig heeft, is deze module het meest geschikt om knelpunten te verminderen.

De "brotli_comp_level 6”-richtlijn stelt het dynamische compressiekwaliteitsniveau in op 6. Het kan variëren van 0 tot 11.

Schakel ten slotte dynamische compressie in voor specifieke MIME-typen, terwijl tekst/html-antwoorden altijd worden gecomprimeerd. De standaardsyntaxis voor deze richtlijn is brotli_types [mime-type]. Je kunt meer vinden over de configuratierichtlijn op Github.

Sla de wijzigingen op, start de Nginx-service opnieuw door te typen "sudo-service herstart nginx" en het is allemaal klaar.

Conclusie

Na de wijzigingen zult u enkele duidelijke verbeteringen opmerken in de prestatiestatistieken. Het heeft echter een klein nadeel van een verhoogde CPU-belasting tijdens piekuren. Houd het CPU-gebruik in de gaten om dergelijke situaties te voorkomen; als het regelmatig 100% bereikt, kunnen we veel opties gebruiken volgens onze voorkeuren, zoals het presenteren van voorgecomprimeerde of statische inhoud, het verlagen van het compressieniveau en het uitschakelen van on-the-fly compressie, onder vele.

Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...
Open source-poorten van commerciële game-engines
Gratis, open source en platformonafhankelijke game-engine-recreaties kunnen worden gebruikt om zowel oude als enkele van de vrij recente gametitels te...