Zum Inhalt

Brotli-Kompression in NGINX aktivieren

Komprimieren Sie Ihre Inhalte 15-25% besser als mit gzip mit dem Brotli-Algorithmus von Google.


  • 15-25% kleiner


    Brotli erzielt bessere Kompressionsraten als gzip für Textinhalte

  • Universelle Unterstützung


    Alle modernen Browser unterstützen Brotli (Chrome, Firefox, Safari, Edge)

  • Schnellere Seitenladezeiten


    Kleinere Dateien = schnellere Downloads, insbesondere in Mobilfunknetzen

  • Geringere Bandbreitenkosten


    Reduzieren Sie die Datenübertragungskosten mit besserer Kompression


Browser-Unterstützung

Brotli wird von 95%+ der Browser weltweit unterstützt:

Browser Brotli-Unterstützung
Chrome ✅ Seit v50 (2016)
Firefox ✅ Seit v44 (2016)
Safari ✅ Seit v11 (2017)
Edge ✅ Seit v15 (2017)
Opera ✅ Seit v38 (2016)

NGINX fällt automatisch auf gzip für ältere Browser zurück.


Schnelle Einrichtung

Schritt 1: Brotli-Modul installieren

# GetPageSpeed-Repository installieren
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

# Brotli-Modul installieren
dnf -y install nginx-module-brotli

Aktivieren Sie in /etc/nginx/nginx.conf:

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Schritt 2: Brotli-Kompression konfigurieren

Erstellen Sie /etc/nginx/conf.d/brotli.conf:

# Brotli-Kompression aktivieren
brotli on;
brotli_comp_level 6;
brotli_static on;

brotli_types
    text/plain
    text/css
    text/javascript
    text/xml
    application/javascript
    application/json
    application/xml
    application/xml+rss
    application/xhtml+xml
    application/atom+xml
    application/rss+xml
    application/x-javascript
    application/x-font-ttf
    application/x-font-opentype
    application/vnd.ms-fontobject
    font/ttf
    font/otf
    font/opentype
    font/woff
    font/woff2
    image/svg+xml
    image/x-icon;

NGINX neu laden:

nginx -t && systemctl reload nginx

Schritt 3: Überprüfen, ob es funktioniert

# Anfrage mit Brotli-Unterstützung
curl -sI -H 'Accept-Encoding: br' https://example.com | grep -i encoding
# Content-Encoding: br

# Größen vergleichen
curl -so /dev/null -w '%{size_download}' -H 'Accept-Encoding: gzip' https://example.com
# 45678
curl -so /dev/null -w '%{size_download}' -H 'Accept-Encoding: br' https://example.com
# 38912  (kleiner!)

Kompressionsstufen

Stufe Geschwindigkeit Kompression Anwendungsfall
1-3 Schnell Niedriger Hoher Verkehr, CPU-begrenzt
4-6 Ausgewogen Gut Die meisten Websites (empfohlen)
7-9 Langsam Besser Vorab komprimierte statische Assets
10-11 Sehr langsam Beste Nur Kompression zur Build-Zeit

Empfehlung

Verwenden Sie Stufe 4-6 für dynamische Inhalte und Stufe 11 für vorab komprimierte statische Assets.


Statische Assets vorab komprimieren

Für maximale Leistung komprimieren Sie Dateien zur Build-Zeit:

# Brotli-CLI-Tool installieren
dnf -y install brotli

# Ihre statischen Dateien komprimieren
find /var/www/html -type f \( -name "*.css" -o -name "*.js" -o -name "*.html" -o -name "*.svg" \) \
    -exec brotli -kf --best {} \;

Dies erstellt .br-Dateien neben den Originalen. NGINX serviert diese automatisch mit brotli_static on.


Größenvergleich

Echtweltbeispiel (jQuery 3.6.0 minifiziert):

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#009639', 'primaryTextColor': '#fff'}}}%%
pie showData
    title Dateigrößenvergleich
    "Original (89KB)" : 89
    "Gzip (31KB)" : 31
    "Brotli (27KB)" : 27
Format Größe Einsparungen
Original 89 KB
Gzip 31 KB 65%
Brotli 27 KB 70%

Erweiterte Konfiguration

Gzip als Fallback beibehalten

# Brotli (Priorität)
brotli on;
brotli_comp_level 6;

# Gzip (Fallback)
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/json;

Unterschiedliche Stufen für dynamische vs. statische Inhalte

# Dynamische Inhalte - schnellere Kompression
brotli on;
brotli_comp_level 4;

# Vorab komprimierte statische Dateien - beste Kompression
brotli_static on;

Mindestgrößenschwelle

# Kleine Dateien nicht komprimieren (nicht lohnenswert)
brotli_min_length 256;

Fehlersuche

Brotli funktioniert nicht
  1. Überprüfen Sie, ob das Modul geladen ist:

    nginx -V 2>&1 | grep brotli
    

  2. Stellen Sie sicher, dass die Anfrage Accept-Encoding: br enthält

  3. Überprüfen Sie, ob der Content-Type in brotli_types enthalten ist

CPU-Auslastung zu hoch

Senken Sie die Kompressionsstufe:

brotli_comp_level 4;  # oder sogar 2-3

Dateien werden nicht komprimiert
  • Überprüfen Sie die Dateigröße > brotli_min_length
  • Stellen Sie sicher, dass der Content-Type mit brotli_types übereinstimmt
  • Überprüfen Sie, ob die Verbindung nicht bereits komprimiert ist (CDN)

Verwandt