NRW:Arbeitsgruppe/Technik/Varnish/LTW2012
Dienste: E-Mail | Lists | Webcache | Blogs | Wikimirror | Domains | RT | Mumble | LAN | Serverstatus
Inhaltsverzeichnis
Caching Server zur LTW2012
Zur Landtagswahl 2012 in NRW erwarten wir einigen Besucheransturm auf unserer Website. Da wir nicht genügend Bandbreite zur Verfügung stellen können, sind wir auf Hilfe anderer Piraten angewiesen. Ihr könnt sehr einfach helfen, wenn ihr einen dedizierten linuxbasierten Server und einiges an Traffic übrig habt. Bitte stellt unbedingt sicher, dass der Server gut erreichbar ist und euch keine zusätzlichen Kosten durch Traffic entstehen!
Die Server sollten mindestens über eine 100MBit/s Anbindung verfügen und 100GB Traffic bereitstellen dürfen. Dedizierte Server werden bevorzugt, da vServer meist wenig Ressourcen zugewiesen bekommen und die Bandbreite mit anderen Instanzen auf dem Hostsystem geteilt werden muss. Checkt bitte auch, ob die Geschäftsbedingungen eures Hosting-Vertrags die Nutzung als Mirrorserver erlauben.
Sollte es einmal Probleme mit irgend einem Server geben, meldet euch bitte möglichst schnell bei Martin Braun.
Server
Folgende Server liefern die Website des Landesverbands NRW aus
| Nr. | Ansprechpartner | ipv4 | ipv6 | Anbindung | Bemerkungen |
| 1 | Martin Braun | 93.190.95.234 | - | 100 Mbit | ComTrance, Düsseldorf |
| 2 | Martin Zieroth | 91.121.203.85 | - | 100 Mbit | OVH, Roubaix |
| 3 | Theodor Reppe | 176.9.171.14 | 2a01:4f8:151:7202:171:14:0:1 | 1 Gbit | Hetzner, Falkenstein |
| 4 | Rainer Bendig | 46.4.177.5 | - | 100 Mbit | Hetzner, Nürnberg |
| 5 | Alexander Brückel | 176.9.204.245 | - | 100 Mbit | Hetzner, Falkenstein |
| 6 | Sascha Körver | 217.115.138.72 | - | 100 Mbit | Host Europe, Köln |
| 7 | Thomas Göttgens | 94.23.160.72 | - | 100 Mbit | OVH, Roubaix |
| 8 | Wolfgang Steinert | 78.46.227.166 | - | 100 Mbit | Hetzner, Falkenstein |
| 9 | Tim Reuter | 176.28.10.217 | - | 100 Mbit | Host Europe, Köln |
| 10 | Christoph G. | 89.238.81.237 | - | 100 Mbit | Manitu, St. Wendel |
| 11 | Martin Braun | 84.246.124.133 | - | 1 Gbit | ConnectingBytes, Düsseldorf |
How-To
So setzt ihr einen Server auf, der beim caching hilft.
- Installiert Debian Squeeze oder Wheezy
- Führt eine minimale Installation durch, alle zusätzlichen Pakete während der Installation bei "tasksel" abwählen
apt-get update apt-get dist-upgrade apt-get install ssh
- Schaltet PasswordAuthentication in der /etc/ssh/sshd_config ab, das ist eine potentielle Sicherheitslücke
- Kopiert euren public-key in die .ssh/authorized_keys Datei um euch per SSH und asymmetrischer Verschlüsselung anzumelden
- Falls ihr Squeeze benutzt, fügt das Debian Wheezy repo in der /etc/apt/sources.list hinzu um Varnish 3.0 zu installieren
deb http://ftp.de.debian.org/debian/ wheezy main
- Nun die Paketquellen neu laden
apt-get update
- Und Varnish installieren. GCC muss je nach System zusätzlich angegeben werden.
apt-get install varnish gcc
- Stellt sicher dass Varnish 3.0 installiert wurde
dpkg -la | grep varnish ii libvarnishapi1 3.0.2-1 shared libraries for Varnish ii varnish 3.0.2-1 state of the art, high-performance web accelerator
- Jetzt könnt ihr das Wheezy repo wieder entfernen
- Editiert die Datei /etc/default/varnish, und ersetzt ihren Inhalt mit der hier bereitgestellten Konfiguration
- Editiert die Datei /etc/varnish/default.vcl, und ersetzt ihren Inhalt mit der hier bereitgestellten Konfiguration
- Startet Varnish neu, damit die Konfiguration aktiv wird
/etc/init.d/varnish restart
- Testet euer Setup um sicherzustellen dass auch die korrekte Seite ausgeliefert wird
- Meldet uns die externe IP Adresse eures Servers, damit wir ihn in die Lastverteilung einbauen können
Varnish Konfiguration
Tragt folgende Konfiguration in der /etc/default/varnish ein. Beachtet dass -a auf :80 gesetzt ist, sonst lauscht Varnish auf einem anderen Port.
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
Tragt folgende Konfiguration in der /etc/varnish/default.vcl ein
backend default {
.host = "84.246.124.133";
.port = "8080";
}
sub vcl_fetch {
set beresp.ttl = 300s;
if (req.url ~ "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$") {
unset beresp.http.set-cookie;
set beresp.ttl = 10m;
}
if (req.http.Cookie ~"(wp-postpass|wordpress_logged_in|comment_author_)") {
set beresp.ttl = 0s;
} else {
set beresp.ttl=10m;
}
if (!beresp.ttl > 0s) {
set beresp.http.X-Cacheable = "NO:Not Cacheable";
} else if ( req.http.Cookie ~"(wp-postpass|wordpress_logged_in|comment_author_)" ) {
set beresp.http.X-Cacheable = "NO:Got Session";
return(hit_for_pass);
} else if ( beresp.http.Cache-Control ~ "private") {
set beresp.http.X-Cacheable = "NO:Cache-Control=private";
return(hit_for_pass);
} else if ( beresp.ttl < 1s ) {
set beresp.ttl = 300s;
set beresp.grace = 300s;
set beresp.http.X-Cacheable = "YES:Forced";
} else {
set beresp.http.X-Cacheable = "YES";
}
if (beresp.status == 404 || beresp.status >= 500) {
set beresp.ttl = 0s;
}
return(deliver);
}
sub vcl_hash {
if ( req.http.Cookie ~"(wp-postpass|wordpress_logged_in|comment_author_)" ) {
#set req.hash += req.http.Cookie;
hash_data(req.http.Cookie);
}
}
sub vcl_deliver {
remove resp.http.X-Varnish;
remove resp.http.Via;
remove resp.http.Age;
remove resp.http.X-Powered-By;
}
sub vcl_recv {
set req.url = regsub(req.url, "\?ver=.*$", "");
set req.url = regsub(req.url, "\?replytocom=.*$", "");
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
set req.grace = 120s;
if (req.url ~ "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$") {
unset req.http.Cookie;
return(lookup);
}
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|has_js)=[^;]*", "");
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
if (req.http.Cookie ~ "^\s*$") {
unset req.http.Cookie;
}
if (req.request == "PURGE") {
if (!client.ip ~ purgehosts) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url + " && req.http.host == " + req.http.host);
error 200 "Purged.";
}
if (req.request != "GET" && req.request != "HEAD") {
return( pass );
}
set req.http.cookie = regsub(req.http.cookie, "1231111111111111122222222333333=[^;]+(; )?", "");
if (req.request == "GET" && (req.url ~ "(wp-admin|bb-admin|server-status|feed)")) {
return(pipe);
}
if (req.http.Cookie && req.http.Cookie ~ "(wordpress_|PHPSESSID)") {
return(lookup);
}
if(req.http.X-Requested-With == "XMLHttpRequest" || req.url ~ "nocache" || req.url ~ "(control.php|wp-comments-post.php|wp-login.php|bb-login.php|bb-reset-password.php|register.php)") {
return (pass);
}
return( lookup );
}
acl purgehosts {
"localhost";
"www.piratenpartei-nrw.de";
"piratenpartei-nrw.de";
}
Testen
Setzt die domain "www.piratenpartei-nrw.de" in der /etc/hosts (Linux/OSX) oder c:\windows\system32\drivers\etc\hosts (Windows) auf die externe IP eures Servers und navigiert mit eurem Browser auf "www.piratenpartei-nrw.de"
123.123.123.123 www.piratenpartei-nrw.de