Varnish Cache ist ein leistungsstarker HTTP-Accelerator, der die Performance von Web-Anwendungen erheblich steigern kann, insbesondere bei High-Traffic-Sites. Durch intelligentes Caching von dynamischen und statischen Inhalten reduziert Varnish die Last auf Webservern wie Nginx oder Apache und beschleunigt die Auslieferung von Inhalten an Endnutzer. In diesem Tutorial zeigen wir praxisnah, wie Varnish installiert, konfiguriert und optimal in einem Web Stack integriert wird.
Systemvoraussetzungen
- Linux-Distribution: Ubuntu 22.04 LTS oder CentOS 9
- Root- oder sudo-Zugriff
- Nginx oder Apache als Backend-Webserver
- Varnish installiert:
sudo apt install varnish -y - Grundlegende Kenntnisse in CLI, Netzwerken und Linux-Dateisystem
Varnish Installation und Basis-Konfiguration
Nach der Installation muss Varnish so konfiguriert werden, dass es Anfragen vom Frontend auf den Backend-Webserver weiterleitet.
# Standard-Port ändern (optional)
sudo nano /etc/default/varnish
DAEMON_OPTS="-a :80
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,256m"
Backend-Webserver definieren
In der VCL-Datei wird der Backend-Server definiert, auf den Varnish Anfragen weiterleitet.
# /etc/varnish/default.vcl
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080"; # Nginx/Apache Port
}
VCL Caching-Strategien
Standard Caching Regeln
sub vcl_recv {
if (req.method == "GET" || req.method == "HEAD") {
return (hash);
}
return (pass);
}
sub vcl_backend_response {
if (beresp.status == 200) {
set beresp.ttl = 5m; # Cache TTL
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
Cache für statische Dateien optimieren
sub vcl_backend_response {
if (bereq.url ~ ".(png|jpg|jpeg|gif|css|js|ico)$") {
set beresp.ttl = 30d;
set beresp.grace = 1h;
}
}
Integration mit Nginx oder Apache
Varnish arbeitet als Reverse Proxy vor dem Webserver. Der Webserver muss auf einem anderen Port laufen (z. B. 8080), während Varnish auf Port 80 hört.
# Nginx Beispiel
server {
listen 8080;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
Varnish Monitoring und Logs
- Live Logs ansehen:
varnishlog - Statistik anzeigen:
varnishstat - Cache Übersicht:
varnishadm ban.list
Health Checks für Backend
Varnish kann Backend-Health Checks durchführen, um fehlerhafte Server automatisch aus dem Pool zu entfernen.
backend default {
.host = "127.0.0.1";
.port = "8080";
.probe = {
.url = "/health";
.interval = 5s;
.timeout = 2s;
.window = 5;
.threshold = 3;
}
}
Varnish Performance Tuning
- Speicherlimit erhöhen:
-s malloc,1G - Thread-Pools optimieren:
-p thread_pool_min=50 -p thread_pool_max=500 - Gzip-Kompression deaktivieren im Backend, da Varnish diese effizient bereitstellen kann
- Keep-Alive und Grace-Zeit für späte Updates nutzen
Cache Invalidation
Um Inhalte gezielt zu aktualisieren, kann Varnish mittels BAN oder PURGE Regeln eingesetzt werden.
# Beispiel BAN nach URL
varnishadm "ban req.url ~ /artikel/123"
IPv4 Subnetzplanung für Varnish und Backend
<math>
Varnish-IP = 10.0.0.2/24
Nginx-IP = 10.0.0.3/24
Backend-Subnetz = 10.0.0.0
Broadcastadresse = 10.0.0.255
</math>
IPv6 Subnetzplanung (optional)
<math>
Varnish-IP = fd00:cache:1::2/64
Nginx-IP = fd00:cache:1::3/64
Subnetzadresse = fd00:cache:1::0
Broadcastadresse = fd00:cache:1::ffff:ffff:ffff:ffff
</math>
Best Practices
- Statische Assets (CSS, JS, Bilder) aggressive TTLs zuweisen
- Dynamische Inhalte gezielt mit kurzer TTL oder PASS behandeln
- Health Checks für Backend implementieren
- Monitoring und Logging kontinuierlich prüfen
- TLS/HTTPS über Nginx vor Varnish terminieren
- Volatile Daten im Backend, nicht im Cache ablegen
- Zero-Downtime Deployments durch gezieltes BAN/Invalidate durchführen
- Ressourcenlimits für Varnish anpassen (RAM, Threads)
- Cache-Statistiken regelmäßig analysieren und optimieren
- Firewall und Netzwerkplanung für Backend-Pods einhalten
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.











