Webserver Konfiguration · 3 min read · Jan 01, 2026

Varnish Vor Apache Auf Ubuntu/Debian Einrichten

Varnish Vor Apache Auf Ubuntu/Debian Einrichten

Version 1.0, 15-10-2010
Folge mir auf Twitter

Varnish ist ein Open-Source-“Webbeschleuniger”, den du verwenden kannst, um deine Website zu beschleunigen.

Es kann bestimmte statische Elemente wie Bilder oder Javascript cachen, aber du kannst es auch für andere Zwecke wie Lastverteilung oder zusätzliche Sicherheit verwenden.

In diesem Tutorial konzentrieren wir uns auf Letzteres.
In diesem Modus wird Varnish unvollständige HTTP-Anfragen daran hindern, deinen Apache-Webserver zu erreichen.

Dieses Tutorial basiert auf Ubuntu, sollte aber wahrscheinlich auch auf Debian funktionieren.

Zuerst stelle sicher, dass du Apache2 ausführst und es konfiguriert hast.

Varnish installieren

Das ist ziemlich einfach, da es im Ubuntu-Repository enthalten ist. Du möchtest jedoch möglicherweise das Varnish-Repository verwenden, um sicherzustellen, dass du eine neuere Version hast. Um dies hinzuzufügen, führe Folgendes aus:

sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

Aktualisiere APT und installiere Varnish:

sudo apt-get update
sudo apt-get install varnish

Super, jetzt hast du Varnish, aber wir müssen es noch konfigurieren.

Varnish-Einstellungen ändern

Zuerst müssen wir den Standardport ändern. Bearbeite /etc/default/varnish:

vim /etc/default/varnish

Scrolle ein wenig nach unten, bis du eine nicht auskommentierte Zeile findest, die mit “ DAEMON_OPTS “ beginnt.

  • Ändere :6081* in :80*, damit es auf dem Standard-HTTP-Port lauscht.
  • Bearbeite default.vcl in etwas anderes, ich habe “mysite.vcl” gewählt.

Speichere die Datei.

Bearbeite die VCL-Datei, die du in der vorherigen Datei erwähnt hast. In meinem Fall werde ich /etc/varnish/mysite.vcl bearbeiten. Füge den folgenden Inhalt ein:

## Anfragen an Apache weiterleiten, der auf Port 8000 auf localhost läuft
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Abrufen
sub vcl_fetch {
        ## Entferne den X-Forwarded-For-Header, falls er existiert.
        remove req.http.X-Forwarded-For;
        
        ## Füge die IP-Adresse des Clients als X-Forwarded-For hinzu. Dies ist die normale IP-Adresse des Benutzers.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Zusätzliche Sicherheit, die "w00tw00t"-Angriffe sind ziemlich nervig, also lass uns das blockieren, bevor es unseren Webserver erreicht
        if (req.url ~ "^/w00tw00t") {
                error 403 "Nicht erlaubt";
        }
        ## Inhalt liefern
        return(deliver);
}

## Liefern
sub vcl_deliver {
        ## Wir werden einige von Varnish hinzugefügte Header verbergen. Wir wollen sicherstellen, dass die Leute nicht sehen, dass wir Varnish verwenden.
              ## Da wir (noch) nicht cachen, warum sollten wir den Leuten sagen, dass wir es verwenden?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
        
        ## Wir möchten die X-Powered-By-Header verbergen. Niemand muss wissen, dass wir PHP ausführen können und Version xyz davon haben.
        remove resp.http.X-Powered-By;
}

Speichere die Datei. Alles klar, das war der Varnish-Teil. Starte es noch nicht.

Apache-Einstellungen ändern

OK, wir müssen Apache2 so konfigurieren, dass es auf localhost lauscht. Dafür sind ein paar kleine Änderungen erforderlich.

vim /etc/apache2/ports.conf

Ändere:

NameVirtualHost *:80
Listen 80

In:

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Apache wird auf diesem Port lauschen. Du musst auch deine vhosts bearbeiten. Öffne deine vhost(s) und ersetze

mit

Bis jetzt so gut. Jetzt müssen wir ein zusätzliches Apache-Modul installieren, um sicherzustellen, dass die IP-Adresse des Benutzers korrekt ankommt. Da Varnish im Grunde mit Apache2 kommuniziert, würdest du 127.0.0.1 als Besucher-IP sehen.

apt-get install libapache2-mod-rpaf

Das RPAF (Reverse Proxy Add Forward)-Modul stellt sicher, dass die IP von 127.0.0.1 durch die IP ersetzt wird, die in X-Forwarded-For von Varnish gesetzt wurde.

Daemons neu starten

Starte Apache neu:

/etc/init.d/apache2 restart

Überprüfe, ob es an der richtigen IP/Port gebunden ist, indem du ausführst:

netstat -lp | grep apache2

Wenn du siehst:

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

Das ist korrekt. Andernfalls hast du einen Fehler gemacht. Alles klar, jetzt müssen wir Varnish neu starten, damit es auf Port 80 lauscht.

/etc/init.d/varnish restart

Wir überprüfen dies erneut, indem wir ausführen:

netstat -lp | grep varnish

Das Ergebnis wird sein:

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd  
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

(Ja, Varnish lauscht auch auf jeder IPv6-Adresse).

Also.. Jetzt haben wir Varnish vor Apache2 platziert. Wir können testen, ob die Seite immer noch funktioniert, indem wir sie einfach besuchen. Du wirst die Seite sehen, als ob nichts passiert wäre. Du kannst dies weiter testen, indem du Apache herunterfährst. Du wirst dann eine Varnish-Fehlerseite sehen.

Bonusfunktionen

Nun, du möchtest vielleicht den HTTP-Servernamen von “Apache” in etwas anderes ändern. Dies kann durch Bearbeiten deiner VCL-Datei, die sich in /etc/varnish befindet, erfolgen. Nach:

sub vcl_fetch {

Füge hinzu:

## Entferne den http.Server-Header
unset obj.http.Server;
## Ändere den http.Server-Header in etwas anderes
set obj.http.Server = "Incognito";

Offensichtlich kannst du es so aussehen lassen, wie du möchtest. DeineDomain.com zum Beispiel. Bitte beachte, dass alle Domains auf diesem Server denselben Servernamen verwenden.

Nun, das ist alles. Du hast jetzt einen Reverse-Proxy vor deinem Apache!
Mit ein wenig Feintuning kannst du es cachen oder loadbalancen.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.