Pound ist ein Reverse Proxy, load balancer und HTTPS front-end für Webserver. Pound wurde entwickelt, um die Last unter mehreren Servern aufzuteilen. Wir nutzen Pound, um Anfragen auf verschiedene Jails zu verteilen.

Wir haben auf dem Server bisher eine Jail mit einem Apache Webserver. Was passiert aber, wenn mal Wartungsarbeiten durchgeführt werden müssen oder mal etwas getestet werden soll? Auf einem Produktivsystem geht das nicht.

Sicherlich könnte man eine zweite Jail erstellen und in dieser testen. Aber nicht immer will man alle Änderungen wiederholen, sondern ist froh wenn etwas funktioniert und dann will man es eigentlich auch einfach in Ruhe lassen.

Ein anderes denkbares Szenario wäre, Anfragen gezielt nach im Browser eingetragener Adresse umzuleiten. So könnte man beispielsweise alle Domains die nur statisches HTML ausliefern an eine extra Jail leiten, auf der ein minimalistischer Webserver läuft, der nur genau dies kann.

Oder wenn mehrere Server betrieben werden, kann Pound dafür genutzt werden, dass wenn ein Server ausfällt, ein anderer dafür einspringt. Du siehst, Pound kann so einiges und ist für vielerlei Szenarien einsetzbar. Und das gute, es ist ein sehr resourcensparendes Tool, was recht einfach und übersichtlich zu konfigurieren ist.

  1. Als erstes installieren wir Pound aus den Ports auf dem Hauptsystem (nicht in einer Jail!):

    # cd /usr/ports/www/pound && make install clean
  2. Im aufscheinenden Konfigurationsmenü wählen wir die Optionen

    [*] DAEMON
    [*] LIBTHR
    [*] LOG
    [*] PCRE

  3. Nach einem kurzen Kompiliervorgang ist die Installation bereits abgeschlossen. Nun müssen wir in der '/etc/rc.conf' noch folgende Zeile eintragen:

    pound_enable="YES"
  4. Wenn du jetzt mit dem Befehl "/usr/local/etc/rc.d/pound start" Pound starten willst, erhälst du die Meldung, dass die Datei '/usr/local/etc/pound.cfg' nicht gefunden werden konnte. Wir müssen die Konfiguration also noch angeben.

    Auf der Website von Pound findest du einige Informationen und Beispiele, wie du den reverse proxy konfigurieren kannst. Hier nur eine Beispielkonfiguration, die die wichtigsten Strukturen bereits erahnen lässt: pound.cfg

    Wichtig sind die Direktiven 'RewriteLocation' und 'RewriteDestination'. Wenn du mod_rewrite-Regeln verwendest, musst du diese auf 0 setzen, sonst gibt es eine Endlosschleife und deine Seite ist nicht mehr erreichbar.


  5. Jetzt musst du noch deine Firewall-Regeln (pf.conf) anpassen.
    • ändere die Weiterleitungsregeln für die Webserver-Jail so ab, dass die Anfragen an Port 80, dem Standard-Webserverport, nicht mehr an die Jail weitergeleitet werden, sondern am Basissystem ankommen (in unserem Beispiel in die Liste 'tcp_pass' und 'udp_pass' den Port '80' eintragen und aus dem Webjail-Pool rauslöschen)
    • Firewallregeln neuladen
    • Pound mit dem Befehl "/usr/local/etc/rc.d/pound start" starten

  6. Wenn du jetzt die Adresse deines Webservers im Browser eingibst, sollte die Seite weiterhin erreichbar sein. In meiner Konfiguration habe ich den SSL-Port nicht weitergeleitet, da ich alle SSL-Bereiche (Adminbereiche) auf einem Server liegen haben und vom Load-Balancing ausschließen will).'

  7. Zum Testen, solltest du deine Webserverjail mal stoppen und die Adresse erneut in deinem Browser aufrufen. Jetzt solltest du die Meldung "The service is not available. Please try again later." erhalten. Das ist eine Systemmeldung von Pound und du siehst, es funktioniert.

  8. Hinweis: In der httpd.conf, der Konfiguration vom Apache Webserver, musst du für sinnvolles Logging in der Zeile "LogFormat" '%h' durch '%{X-Forwarded-for}i' ersetzen und den Apache neustarten.

    Falls du lighttpd als Webserver einsetzt, dann musst du die folgende Zeile in die 'lighttpd.conf' einfügen:

    accesslog.format = "%{X-Forwarded-For}i %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""