Quantcast
Channel: unorganisiertes sammelsurium (Artikel mit Tag programme)
Viewing all articles
Browse latest Browse all 15

lighty als http(s)-reverse-Proxy

$
0
0

Wie schon berichtet, hat bei mir jede (Sub-)Domain ihr eigenes chroot. Daraus ergibt sich nun aber das (noch-nicht)-Problem, dass ich maximal 17 (Sub-)Domains (ein /28 IPv4 und die Standard-IP) verwenden kann. Daher habe ich seit heute einen weiteren lighty laufen, diesen aber als Reverse-Proxy, der je nach angefragtem Host die Anfrage an einen der anderen, auf localhost lauschenden lighty (wenn ich es mal brauchen sollte würden hierdurch auch Tomcat und andere Perversitäten gehen) weiterreicht.

Als besonderes Schmankerl fungiert er gleichzeitig noch als https-Verschlüssler. Ich habe mir hierzu bei CAcert ein Zertifikat mit mehreren SubAltNames, welches sämtliche Domains enthält, erzeugt. Mit diesem einen Zertifikat füttere ich nun nur den Proxy, und schon sind alle Seite hintendrann auch über https erreichbar!

Das genaue Setup dazu sieht wie folgt aus:

Der bis jetzt genutzte Webserver wird so umkonfiguriert, dass er ab nun nurnoch auf localhost, Port 60001 lauscht. Der nächste kommt dann auf localhost, Port 60002 und so weiter. Somit ist es möglich, beliebig viele chroots anzulegen, und trotzdem nach aussen auf einer einzigen IP aufzutreten.

Den lighttpd wird installiert, unter Debian ganz normal per aptitude install lighttpd. Die relevanten Teile der Konfiguration sind:

server.modules = ("mod_accesslog","mod_proxy"
 )
Der lighty soll nichts weiter machen als die Anfragen durchzureichen. Zusätzlich lasse ich ihn und nicht die Backends den Acceslog schreiben, damit ich logrotate, awstats etc nur für eine einzige Datei konfigurieren muss. Daher brauche ich nur diese beiden Module.
$SERVER["socket"] == "80.244.243.94:443" {
                  ssl.engine    = "enable"
                  ssl.pemfile   = "/etc/lighttpd/certs/proxy-80.244.243.94.pem"
                  ssl.ca-file   = "/etc/lighttpd/certs/cacert-class3.crt"
}
Ich aktiviere SSL für Verbindungen auf Port 443, der Trick hierbei ist nun das Zertifikat /etc/lighttpd/certs/proxy-80.244.243.94.pem, welches wie oben bereits beschrieben sämtliche Domains, die ich verwenden will, enthält. Die einzelnen Domains werden dann wiefolgt konfiguriert:
$HTTP["host"] == "netzhure.de" {
        proxy.server  = ( "" => ( ("host" =>"127.0.0.1","port" => 60001
        ) ) )
}

$HTTP["host"] == "git.netzhure.de" {
        proxy.server  = ( "" => ( ("host" =>"127.0.0.1","port" => 60002
        ) ) )
}
Anstatt == als Vergleichsoperator ist auch =~ möglich, desweiteren kann auch auf einige andere Eigenschaften gematcht werden. Mit $HTTP["URL"] kann so zum Beispiel sogar http://example.com/foo an ein anderes Backend als http://example.com/bar geschickt werden. $HTTP["host"] =~ "^(www\.)?example.com" leitet Anfragen für example.com und www.example.com an das selbe Backend. Somit sind hier deutlich flexiblere Szenarien als mit den klassischen Name Based Virtual Hosts, wie man sie vom Apachen kennt, möglich.

git.netzhure.de gibt es bis jetzt noch nicht, aber dieser Blog ist schon unter https://netzhure.de erreichbar. Die gesamte Proxy-Konfiguration zum runterladen gibts nochmal hier, es sollte allerdings beachtet werden dass einige Optionen schon für das chroot angepasst sind in dem es läuft...


Viewing all articles
Browse latest Browse all 15