Caching in Nginx: Proxy Cache für schnellere Webseiten

Caching ist ein entscheidender Faktor für die Performance moderner Webanwendungen. Nginx bietet leistungsfähige Mechanismen, um Inhalte zwischenzuspeichern und Anfragen effizient zu bedienen. Mit einem korrekt konfigurierten Proxy Cache lassen sich Serverlast reduzieren, Ladezeiten verkürzen und die Nutzererfahrung verbessern. In diesem Leitfaden erfahren Einsteiger, IT-Studierende und Junior Network Engineers, wie Nginx Proxy Caching eingerichtet und optimiert wird.

Voraussetzungen

Bevor der Proxy Cache eingerichtet wird, sollten die grundlegenden Voraussetzungen auf dem Server erfüllt sein.

  • Linux-Server mit Nginx installiert (Ubuntu 22.04+, CentOS 8+)
  • Root- oder Sudo-Rechte für Konfiguration und Installation
  • HTTPS-Zertifikate (optional, für sichere Webseiten)
  • Zugriff auf die Nginx-Konfigurationsdateien

System vorbereiten

Ein aktuelles System stellt sicher, dass alle Pakete und Abhängigkeiten korrekt funktionieren.

System aktualisieren

sudo apt update
sudo apt upgrade -y

Für CentOS/RHEL:

sudo yum update -y

Notwendige Pakete installieren

sudo apt install wget curl git unzip -y

Proxy Cache Verzeichnis anlegen

Der Proxy Cache benötigt einen Speicherort auf dem Server, um zwischengespeicherte Inhalte abzulegen.

sudo mkdir -p /var/cache/nginx/proxy_cache
sudo chown -R www-data:www-data /var/cache/nginx/proxy_cache
sudo chmod -R 700 /var/cache/nginx/proxy_cache

Proxy Cache in Nginx konfigurieren

Die Konfiguration erfolgt in der Hauptdatei /etc/nginx/nginx.conf oder in einem Serverblock.

Cache Zone definieren

http {
    proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
}
  • levels: Verzeichnisstruktur für Cache-Dateien
  • keys_zone: Name und Speichergröße der Cache-Zone
  • max_size: Maximale Größe des Caches
  • inactive: Zeitspanne, nach der inaktive Inhalte gelöscht werden
  • use_temp_path: Optimierung der Zwischenspeicherung

Serverblock mit Proxy Cache

server {
    listen 80;
    server_name meinewebsite.de www.meinewebsite.de;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Proxy-Cache $upstream_cache_status;
}

}

Erklärung wichtiger Parameter

  • proxy_pass: Ziel-Backend-Server
  • proxy_set_header: Header für korrekte Weiterleitung und Logging
  • proxy_cache: Name der Cache-Zone
  • proxy_cache_valid: Zeitspanne, für die Inhalte gecached werden
  • proxy_cache_use_stale: Nutzung von veralteten Inhalten bei Backend-Fehlern
  • X-Proxy-Cache Header: Statusanzeige (HIT, MISS, BYPASS)

Cache kontrollieren und leeren

Manchmal müssen Inhalte aktualisiert oder der Cache geleert werden.

Cache-Verzeichnis leeren

sudo rm -rf /var/cache/nginx/proxy_cache/*
sudo systemctl reload nginx

Cache Status prüfen

curl -I http://meinewebsite.de/
# X-Proxy-Cache: HIT / MISS

Performance-Optimierung

Durch zusätzliche Parameter kann der Proxy Cache weiter optimiert werden.

Cache-Control Header nutzen

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_cache my_cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    add_header Cache-Control "public, max-age=600";
}

Größe und Levels anpassen

  • max_size je nach Server-Ressourcen einstellen (z.B. 5G)
  • levels anpassen, um Dateisystemüberlastung zu vermeiden

HTTPS und Proxy Cache

Bei verschlüsseltem Traffic muss Nginx als TLS-Termination arbeiten, um Proxy Caching zu ermöglichen.

Serverblock für HTTPS

server {
    listen 443 ssl http2;
    server_name meinewebsite.de;
ssl_certificate /etc/letsencrypt/live/meinewebsite.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meinewebsite.de/privkey.pem;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_cache my_cache;
proxy_cache_valid 200 10m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}

}

Monitoring und Logging

Überwachung des Proxy Cache hilft, die Performance zu bewerten und Probleme frühzeitig zu erkennen.

Cache-Status im Log

log_format cache_status '$remote_addr - $upstream_cache_status [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log cache_status;

Analysetools

  • tail -f /var/log/nginx/access.log
  • nginx-cache-purge Tools für detaillierte Analyse

Netzwerk und Subnetze

Die Effizienz des Caches hängt auch von der Netzwerkarchitektur ab. Korrekte IPs, Subnetze und Gateway-Einstellungen sind entscheidend.

Subnetzberechnung

Beispiel: Server-IP 192.168.80.25/24

<math>
Subnetzadresse = 192.168.80.25 & 255.255.255.0 = 192.168.80.0
Broadcastadresse = 192.168.80.0 | ~255.255.255.0 = 192.168.80.255
</math>

Netzwerkinterface konfigurieren

sudo nano /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.80.25/24
      gateway4: 192.168.80.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
sudo netplan apply

Best Practices

  • Proxy Cache nur für statische oder semi-statische Inhalte verwenden
  • Cache-Zeiträume abhängig von Aktualität der Inhalte einstellen
  • Regelmäßige Überwachung von Cache-Hits und -Misses
  • SSL-Termination für HTTPS und Caching kombinieren
  • Server-Ressourcen beobachten, um Cache-Größe optimal anzupassen
  • Logs analysieren, um fehlerhafte Weiterleitungen oder Cache-Probleme zu identifizieren

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles