Da meine Bedürfnisse an einen Webserver eher minimal sind, habe ich mich gegen den Apache und für lighttpd entschieden. Hinzu kommt der reduzierte Ressourcenbedarf von lighttpd, was ihn wesentlich attraktiver macht.
lighttpd installieren
Die Installation ist unter Debian gewohnt einfach
sudo aptitude install lighttpd
was folgende Pakete mitinstalliert
libfam0 libterm-readkey-perl libterm-readline-perl-perl
lighttpd konfigurieren
Um später die Weiterleitung nutzen zu können, aktivieren wir die Module rewrite und redirect in /etc/lighttpd/lighttpd.conf
durch entfernen der Rautezeichen. Das ganze sieht dann wie folgt aus:
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_rewrite",
"mod_redirect",
# "mod_evhost",
# "mod_usertrack",
# "mod_rrdtool",
# "mod_webdav",
# "mod_expire",
# "mod_flv_streaming",
# "mod_evasive"
)
virtuellen Host einrichten
Lighttpd unterstützt mehrere (Sub-)Domains. Das ist besonders dann von Interesse, wenn man mehrere Webseiten auf einem Server betreiben will. Uns interessiert erst einmal nur der einfache Fall mit einer Domain. Dazu legen wir zunächst ein Verzeichnis an, welches später die Website beherbergen soll.
sudo mkdir -p /var/www/example/www
sudo chown www-data:www-data /var/www/example/www/
Danach hängen wir folgende Zeilen an /etc/lighttpd/lighttpd.conf
an:
$HTTP["host"] =~ "^(www\.)?example\.com$" {
server.document-root = "/var/www/example/www"
}
Der reguläre Ausdruck sorgt dafür, dass unsere Webseite sowohl mit als auch ohne Prefix www erreichbar ist. Anschließend starten wir lighttpd neu.
sudo invoke-rc.d lighttpd restart
SSL
Um später auch Passwörter vernünftig übertragen zu können bietet sich eine verschlüsselte Kommunikation mit SSL an. Dazu benötigt der Server ein signiertes Zertifikat. Die Erzeugung eines solchen ist leider etwas aufwändiger. Doch bevor wir loslegen, muss, falls nicht vorhanden, openssl installiert werden
sudo aptitude install openssl
und ein Schlüsselpaar erstellt werden.
openssl genrsa -out example.com.key 2048
Um ein Certificate Signing Request (CSR) zu erstellen, nutzen wir den (soeben) erstellten (öffentlichen) Schlüssel
openssl req -new -key example.com.key -out example.com.csr
Als Common Name (CN) geben wir die Adresse des Servers an für den das Zertifikat ausgestellt werden soll, für unser Beipiel also www.example.com.
Da selbstsignierte Zertifikate immer zu Fehler- /Warnmeldungen im Browser führen, bietet sich StartSSL an. Deren Wurzelzertifikat ist in den gängigen Browsern bereits installiert und für unsere Zwecke (Zertifikat für einen Webserver ohne Subdomains) ist der Dienst kostenlos. Beginnend mit dem Punkt "Express Lane" erzeugen wir zunächst ein SSL-Clientzertifikat für die Authentifizierung bei StartSSL und anschließend das SSL-Serverzertifikat. Als Domain geben wir nur example.com an, der Prefix wwww wird automatisch ergänzt. Die Generierung des Schlüsselpaares für das Serverzertifikat sollte man überspringen und das eigene zuvor erstellte verwenden. Das fertige Serverzertifikat wird uns als Base64-codierter Text präsentiert, den wir unter example.com.crt
abspeichern.
Da lighttpd nur Zertifikate im PEM-Format unterstützt, müssen wir das CRT-Zertifikat vorher konvertieren. Dies geschieht einfach durch Hinzunahme unseres Schlüssels mittels
cat example.com.crt example.com.key > example.com.pem
Jetzt kopieren wir das Zertifikat noch an die richtige Stelle, bspw. /etc/lighttpd/ssl
sudo mkdir /etc/lighttpd/ssl
sudo cp example.com.pem /etc/lighttpd/ssl/
sudo chmod 400 /etc/lighttpd/ssl/example.com.pem
Für einen reibungslosen betrieb muss der Webserver das Intermediate-Zertifikat (IM) von StartSSL ausliefern, mit dem unser SSL-Serverzertifikat unterschrieben wurde. Dazu laden wir zunächst die benötigten Zertifikate herunter, vereinen diese und speichern sie ebenfalls unter /etc/lighttpd/ssl
ab.
wget -c https://www.startssl.com/certs/sub.class1.server.ca.pem
wget -c https://www.startssl.com/certs/ca.pem
cat ca.pem sub.class1.server.ca.pem > ca-certs.crt
sudo cp ca-certs.crt /etc/lighttpd/ssl/
sudo chmod 400 /etc/lighttpd/ssl/ca-certs.crt
Nun bleibt uns nur noch SSL in lighttpd zu aktivieren. Dazu editieren wir die Datei /etc/lighttpd/lighttpd.conf
und ergänzen vor dem virtuellen Host folgende Zeilen:
## redirect all hosts to their secure equivalents
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}
## enable ssl
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.ca-file = "/etc/lighttpd/ssl/ca-certs.crt"
ssl.pemfile = "/etc/lighttpd/ssl/example.com.pem"
}