[[Vorlage(Getestet, bionic)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(./lighttpd_logo.png, align=left)]] [http://www.lighttpd.net/ lighttpd] {en} (gesprochen "lighty") ist ein [wikipedia:Webserver:], der weit weniger Ressourcen benötigt als z.B. [:Apache:] und so vor allem für sehr große Lasten oder sehr schwache Systeme gut geeignet ist. Er wurde von Jan Kneschke entwickelt und ist durch Module erweiterbar. FastCGI ermöglicht beispielsweise das Ausführen von PHP Code. SCGI ergänzt lighty um Ruby oder auch Python. = Installation = lighttpd lässt sich direkt aus den offiziellen Paketquellen installieren [1]: {{{#!vorlage Paketinstallation lighttpd, universe }}} = Konfiguration = Der lighttpd wird über die Datei '''/etc/lighttpd/lighttpd.conf''' konfiguriert. Diese lässt sich mit einem beliebigen Texteditor [2] mit Root-Rechten bearbeiten. Die wichtigsten Optionen sollen hier kurz vorgestellt werden. Zahlreiche weitere Konfigurationsmöglichkeiten finden sich ausführlich beschrieben in der Konfigurationsdatei selbst. == Datenpfad bestimmen == lighttpd sucht im Verzeichnis '''/var/www/html/''' nach Webseiten, die er darstellen soll. Möchte man hier ein anderes Verzeichnis nutzen, so kann man dies über den Eintrag {{{ server.document-root = "/var/www/html" }}} definieren. Dabei ist zu beachten, dass der Benutzer ''"www-data"'', unter dem der Webserver läuft, auf diese Daten zumindest lesend zugreifen können muss. Anschließend kann man über `http://localhost/` die Webseiten aufrufen. Sollte bereits eine '''index.php''' oder ähnlich vorhanden, aber die Erweiterung für [:PHP:] noch nicht installiert sein, bekommt man die Fehlermeldung `403`. Nach der erfolgreichen Installation der entsprechenden Erweiterung sollte diese verschwunden sein. === Virtuelle Hosts === Sollen für verschiedene Hostnamen unterschiedliche Verzeichnisse verwendet werden, so kann dies mit Hilfe des Moduls [http://trac.lighttpd.net/trac/wiki/Docs%3AModSimpleVhost mod_simple_vhost] {en} eingestellt werden (die Option `server.virtual-*`, welche noch in der Konfigurationsdatei erwähnt wird, ist veraltet). Zunächst wird die Konfiguration für virtuelle Hosts prinzipiell zugeschaltet. Dies geschieht mit dem Befehl [3]: {{{#!vorlage Befehl sudo lighty-enable-mod simple-vhost sudo service lighttpd force-reload }}} Dadurch wird ein Link im Verzeichnis '''/etc/lighttpd/conf-enabled/''' gesetzt. Die eigentliche Konfiguration könnte dann so aussehen, wie ein Beispiel in '''/etc/lighttpd/conf-available/10-simple-vhost.conf''' zeigt: {{{ ## Beispiel für /etc/lighttpd/conf-available/10-simple-vhost.conf server.modules += ( "mod_simple_vhost" ) ## Der document root der virtuellen Hosts ist document-root = ## simple-vhost.server-root + $HTTP["host"] + simple-vhost.document-root simple-vhost.server-root = "/srv" simple-vhost.document-root = "htdocs" ## Der default Host, wenn keiner gesendet wurde simple-vhost.default-host = "www.example.com" }}} Zu den Ausdrücken: """^(...""" siehe auch [wikipedia:Regulärer Ausdruck:Regulärer Ausdruck] und [http://www.regular-expressions.info/reference.html regular-expressions.info] {en}. == Netzwerk-Port bestimmen == Möchte man lighttpd z.B. parallel zum Webserver Apache betreiben, so würden beide Server Port `80` nutzen. Dies ist jedoch nicht möglich: eine Port kann nur von einer Anwendung verwendet werden. Bei Bedarf lässt sich der Port, auf dem lighttpd auf Anfragen entgegen nimmt, über die Option {{{## bind to port (default: 80) server.port = 8080 }}} festlegen. In diesem Beispiel würde man den Port des lighttpd auf `8080` setzen. In diesem Fall müsste man Webseiten über die URL `http://localhost:8080/` aufrufen. == An den Localhost binden == Betreibt man den Webserver an einem Rechner, der direkt aus dem Internet erreichbar ist, so möchte man den Webserver eventuell nur an den localhost, sprich an den Rechner selber, binden. Dadurch lässt sich der Webserver weder aus dem Netzwerk noch aus dem Internet erreichen. Dies lässt sich durch die Option {{{## bind to localhost only (default: all interfaces) server.bind = "localhost" }}} erreichen. == Dokumentationen freigeben == Auf einem Linux-System befinden sich im Verzeichnis '''/usr/share/doc/''' zahlreiche Dokumentationen im HTML-Format. Diese Anleitungen kann lighttpd auch im Netzwerk zur Verfügung stellen. Sie werden von Haus aus eingebunden. Man kann sie vom Rechner, auf dem auch der Webserver zu erreichen ist, unter der Adresse `http://localhost/doc/` aufrufen. Allerdings ist der Zugriff auf den localhost beschränkt. Sollen andere Rechner im Netzwerk die Dokumentationen aufrufen können, muss die Beschränkung auf den localhost auskommentiert werden: {{{#!code bash sudo lighty-enable-mod debian-doc sudo service lighttpd force-reload }}} Anschließend lassen sich die Dokumentationen von einem beliebigen Rechner unter `http:///doc/` aufrufen. = Server steuern = Wie alle anderen Dienste bringt lighttpd Start/Stop-Skripte mit. Diese Skripte lassen sich natürlich auch zum Kontrollieren des Webservers verwenden: {{{#!vorlage Befehl # Allgemein sudo systemctl {start|stop|restart} lighttpd # Beispiel sudo systemctl restart lighttpd # reload: service lighttpd {reload|force-reload} # Beispiel service lighttpd reload }}} * `start` - Startet den Server * `stop` - Stoppt den Server * `restart` - Startet den Server neu, bestehende Verbindungen auf den Server werden gekappt * `reload` - Lädt die Konfigurationsdateien neu, ohne dass Verbindungen getrennt werden * `force-reload` - Lädt die Konfigurationsdateien neu, wobei bestehende Verbindungen getrennt werden. Mehr dazu im Wiki unter [:Dienste:]. = Zusatzmodule = Auch lighttpd lässt sich durch Module um zusätzliche Funktionen erweitern. So lassen sich Interpretersprachen wie z.B. PHP einbinden. Oder Webseiten können aus den Homeverzeichnissen der Benutzer gelesen werden. Vielleicht wird eine Verschlüsselung per SSL gewünscht? == Userdir == Wie üblich ist es möglich, dass der Webserver auch Daten aus den Homeverzeichnissen der lokalen Benutzer auslesen kann. Dazu muss der jeweilige Benutzer einen Ordner '''~/public_html''' in seinem Homeverzeichnis anlegen und dort dem Benutzer ''"www-data"'' des Webservers zumindest Leserechte geben. Wenn dann noch das Modul mittels {{{#!vorlage Befehl sudo lighty-enable-mod userdir sudo service lighttpd force-reload }}} aktiviert und der Webserver neu gestartet wurde, so können die dort hinterlegten Dateien über `http://localhost/~benutzername/` ausgelesen werden. == CGI == [wikipedia:Common_Gateway_Interface:CGI] ist eine Schnittstelle zwischen Webserver und Betriebssystem, um z.B. Perl Scripte auch über den Webserver auszuführen. So können dynamische Inhalte erzeugt werden. Das benötigte Modul muss mittels {{{#!vorlage Befehl sudo lighty-enable-mod cgi sudo service lighttpd force-reload }}} aktiviert werden. Nach einem Neustart des Webservers können nun Skripte im Verzeichnis '''/usr/lib/cgi-bin''' abgelegt und über `http://localhost/cgi-bin/beispiel.cgi` aufgerufen werden. Dabei ist zu beachten, dass der Benutzer ''"www-data"'', unter dem der Webserver läuft, diese Daten lesen und auch ausführen können muss. == PHP == Grundvoraussetzung ist, dass [:PHP:] überhaupt auf dem Rechner installiert ist. PHP lässt sich über das Paket {{{#!vorlage Paketinstallation php-cgi, für [:Bionic:] }}} installieren [1]. Anschließend muss man die Module in lighty aktivieren: {{{#!vorlage Befehl sudo lighty-enable-mod fastcgi sudo lighty-enable-mod fastcgi-php sudo service lighttpd force-reload }}} == SSL == Über [wikipedia:Transport_Layer_Security:TLS] (SSL) kann man verschlüsselte Verbindungen zum Webserver aufbauen. Diese Funktion muss ebenfalls erst über ein Modul aktiviert werden. Grundvoraussetzung ist, dass das folgende Paket installiert [1] ist. {{{#!vorlage Paketinstallation openssl }}} Anschließend kann das Modul aktiviert werden: {{{#!vorlage Befehl sudo lighty-enable-mod ssl sudo service lighttpd force-reload }}} Besitzt man ein gültiges SSL-Zertifikat, so sollte man es nach '''/etc/lighttpd/server.pem''' kopieren. Möchte man einen individuellen Pfad nutzen, so kann man diesen in der Datei '''/etc/lighttpd/conf-available/10-ssl.conf''' setzen. Natürlich kann man sich auch ein eigenes SSL-Zertifikat mittels {{{#!vorlage Befehl cd /etc/lighttpd sudo openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes }}} erstellen. Allerdings geben Webbrowser dann eine Warnung aus, dass dieses Zertifikat nicht verifiziert werden kann. Die Verbindung wird aber trotzdem verschlüsselt. Ist das Zertifikat hinterlegt und der Webserver neu gestartet, so erreicht man die verschlüsselten Seiten ab jetzt über `https://localhost/ https://localhost/`. == HTTP-Authentifizierung == Um Verzeichnisse mit einem Passwortschutz zu versehen, ist das Modul ''auth'' notwendig und wird über {{{#!vorlage Befehl sudo lighty-enable-mod auth sudo service lighttpd force-reload }}} aktiviert. Die von [:Apache:] bekannte Verwendung von ''.htaccess''-Dateien ist mit lighty leider nicht möglich. Stattdessen müssen die Einstellungen in der Konfigurationsdatei '''/etc/lighttpd/conf-enabled/05-auth.conf''' vorgenommen und der Webserver neu gestartet werden. Die Authentifizierung ist mit ''basic'' und ''digest'' möglich, wobei die Backends ''plain'', ''htpasswd'', ''htdigest'' und ''ldap'' verwendet werden können. Weitere Informationen können im [http://redmine.lighttpd.net/projects/1/wiki/Docs:ModAuth lighttpd Wiki] {en} nachgelesen werden. Dort ist unter anderem vermerkt, dass die ''digest''-Implementierung (noch) nicht sicher ist. Um beispielsweise die Verzeichnisse '''/server-status''' und '''/server-statistics''' mit einer `basic`-Authentifizierung über '''.htpasswd''' zu versehen ist, folgender Eintrag in der '''05-auth.conf''' nötig: {{{ auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/etc/lighttpd/htpasswd" auth.require = ( "/server-status" => ( "method" => "basic", "realm" => "server status", "require" => "valid-user" ), "/server-info" => ( "method" => "digest", "realm" => "server info", "require" => "valid-user" ) ) }}} Die '''htpasswd'''-Datei muss, wenn die Authentifizierung mit ''basic'' verwendet wird, Passwort-Hashes im Format: {{{ valid-user:$apr1$RDb7c6Qj$hWfvs2G2OLDCFbtN9s8Qf1 }}} enthalten. Diese können mittels des Apache-Werkzeugs '''htpasswd''' komfortabel erzeugt werden. Dabei ist zuerst ein Pakt zu installieren: {{{#!vorlage Paketinstallation apache2-utils }}} Dabei ist zu beachten, dass lighttpd nur die Verwendung des modifizierten Apache-MD5-Hashs unterstützt, welcher mittels {{{#!vorlage Befehl htpasswd -m }}} erzeugt werden kann. Sollen weitere Verzeichnisse mit anderen '''.htpasswd'''-Dateien geschützt werden, so muss man die URL filtern und zu dem Filter eine eigene '''.htpasswd'''-Datei angeben. Im folgenden Beispiel wird das Verzeichnis '''/geheim''' mit einer anderen Passwortdatei versehen: {{{ $HTTP["url"] =~ "^/geheim" { auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/pfad/zur/anderen/.htpasswd" auth.require = ( "/geheim" => ( "method" => "basic", "realm" => "Bitte geben Sie Benutzername und Passwort für den geheimen Bereich ein. ", "require" => "valid-user" ), ) } }}} Mit der Anweisung: {{{ "require" => "valid-user" }}} werden alle user in der Datei '''/pfad/zu/.htpasswd''' zugelassen. möchte man dies einschränken, so muss folgendes konfiguriert werden: {{{ "require" => "user=myUser" }}} == WebDAV == [:WebDAV:] ist ein Standard, mit dem Verzeichnisse auf einem Webserver wie eine Netzwerkfestplatte benutzt werden können. Auch diese Funktion lässt sich über ein Modul für lighttpd aktivieren. Dabei ist zu beachten, dass noch nicht alle Funktionen im entsprechenden Modul vollständig implementiert sind. Außerdem gibt es zwei Arten, wie man dieses Modul installieren kann, die sich auch von der Funktions-Unterstützung her unterscheiden. === Minimale WebDAV-Unterstützung === Das in den offiziellen Paketquellen von Ubuntu enthaltene Modul lässt sich mit dem folgendem Paket installieren [1]: {{{#!vorlage Paketinstallation lighttpd-mod-webdav, universe }}} Dieses enthält aber lediglich die Webdav-Funktionen `GET`, `POST`, `HEAD`, `PROPFIND`, `OPTIONS`, `MKCOL`, `PUT` und `DELETE`. Damit ist es nicht möglich, Dateien zu verschieben, zu kopieren oder als Festplatte einzubinden. === Erweiterte Unterstützung === Um Webdav-Funktionen wie (UN)LOCK, die das Einbinden als Festplatte ermöglichen, nutzen zu können, muss man sich lighttpd selbst aus dem Quelltext [:Programme_kompilieren:kompilieren]. Dazu sind die folgenden Pakete notwendig: {{{#!vorlage Paketinstallation libbz2-dev libsqlite3-0 libsqlite3-dev libxml2 libxml2-dev uuid-dev }}} Anschließend lädt man den [http://www.lighttpd.net/download Quelltext] {en} herunter. Nachdem man diesen entpackt hat, wechselt man in den entpackten Ordner und führt dort ein {{{ ./configure --with-webdav-props --with-webdav-locks }}} aus. Wenn ein Fehler ausgegeben wird, fehlen eventuell noch Pakete. Werden keine Fehler ausgegeben, kompiliert man mit {{{ make }}} Zuletzt kann man den neuen lighttpd dann mit `sudo checkinstall` oder `sudo make install` installieren. {{{#!vorlage Hinweis Wer die Webdav-Ressource mit einer Authentifizierung schützen will, sollte sich mal [http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModAuth mod_auth] {en} ansehen. }}} = Logdateien = Natürlich schreibt auch lighttpd ausführliche Logdateien. Zur Kontrolle oder Fehlersuche kann man diese auslesen. Man findet sie unter '''/var/log/lighttpd'''. Mehr zu Thema Logdateien findet man [:Logdateien:hier] im Wiki. = Problembehebung = == PDF-Dateien == Um Probleme beim Anzeigen von größeren PDF-Dateien zu vermeiden, sollte die Konfigurationsdatei '''/etc/lighttpd/lighttpd.conf''' um folgendes ergänzt werden: {{{#!vorlage Befehl $HTTP["url"] =~ "\.(?i:pdf)$" { server.range-requests = "disable" } }}} = Links = * [http://www.lighttpd.net/ Projektseite] {en} * [http://redmine.lighttpd.net/projects/lighttpd/wiki Dokumentation] {en} * [:Serverdienste:Webserver] {Übersicht} Programmübersicht # tag: Internet, Netzwerk, Server