gzip în Nginx

Performanță și PHP Toate versiunile Nginx

Comprimă din mers răspunsurile text (HTML, CSS, JS, JSON, SVG) înainte de a le trimite către browser.

Sintaxă
gzip on | off;
gzip_types mime/type ...;
gzip_comp_level 1..9;

Ce face gzip

Comprimarea gzip reduce de obicei cu 60–80% dimensiunea fișierelor text (HTML, CSS, JavaScript, JSON, XML, SVG) transmise prin rețea. Deși în /etc/nginx/nginx.conf pe Debian/Ubuntu găsești deja gzip on;, în mod implicit Nginx comprimă doar text/html — restul liniilor (gzip_types, gzip_comp_level) sunt comentate și trebuie decomentate.

Nivelul de comprimare gzip_comp_level merge de la 1 (cel mai rapid) la 9 (cea mai mică dimensiune, dar cu consum mare de procesor). În practică, 5 sau 6 oferă aproape toată reducerea de dimensiune, fără a încărca inutil CPU-ul.

Nu adăuga niciodată în gzip_types formate care sunt deja comprimate (imagini JPEG/PNG/WebP, arhive ZIP, PDF, video MP4, fonturi WOFF2): nu se mai micșorează, ci doar consumă timp de procesor.

Opțiuni și argumente

Opțiune / Parametru Descriere
Context: http, server, location Se configurează o singură dată în blocul http din /etc/nginx/nginx.conf.
gzip on | off Activează sau dezactivează comprimarea răspunsurilor.
gzip_types Lista tipurilor MIME comprimate în plus față de text/html (care este mereu inclus).
gzip_comp_level 1..9 Nivelul de comprimare (implicit 1; recomandat 5 sau 6).
gzip_min_length N Nu comprimă răspunsurile mai mici de N octeți (implicit 20; recomandat 256 sau 1024).
gzip_vary on Adaugă antetul Vary: Accept-Encoding pentru ca proxy-urile și CDN-urile să nu amestece variantele comprimate cu cele necomprimate.
gzip_proxied any Comprimă și răspunsurile venite de la un backend prin proxy_pass.

Exemple

Exemplul 1: Configurație gzip completă în blocul http

Poți pune aceste directive în /etc/nginx/nginx.conf sau în /etc/nginx/conf.d/gzip.conf:

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_min_length 256;

gzip_types
    text/plain
    text/css
    text/javascript
    application/javascript
    application/json
    application/xml
    application/rss+xml
    image/svg+xml;

Exemplul 2: Verificarea comprimării cu curl

Trimitem Accept-Encoding: gzip și căutăm Content-Encoding: gzip în răspuns:

curl -I -H "Accept-Encoding: gzip" https://example.com/assets/app.css

Rezultat

HTTP/2 200 
server: nginx
content-type: text/css
content-encoding: gzip
vary: Accept-Encoding

Greșeli frecvente

  • A crede că gzip on; singur comprimă și CSS/JS/JSON: fără gzip_types, doar text/html este comprimat.
  • Scrierea text/html în gzip_types: este deja inclus automat, iar Nginx afișează avertismentul [warn] duplicate MIME type "text/html".

Comenzi înrudite

  • expires: Setează antetele Cache-Control și Expires pentru ca browserul și CDN-ul să păstreze în cache fișierele statice.
  • nginx.conf și sites-available: Cum sunt organizate fișierele de configurare: nginx.conf, include, conf.d, sites-available și sites-enabled.
  • add_header: Adaugă antete HTTP în răspunsul trimis clientului (antete de securitate HSTS, CSP, X-Frame-Options sau CORS).