Eine interessante Alternative zum Apache Webserver bietet der lighttpd-Webserver, kurz "lighty". Viele haben wahrscheinlich von ihm gehört, da auch große Seiten wie YouTube auf diesen Server aufsetzen. Jetzt wollen wir uns selber mal diesen schnellen und ressourcensparenden Server aufsetzen und PHP5- sowie Ruby-tauglich machen.
- Da ich von Apache auf lighttpd migriert habe, war für einen reibungslosen Umstieg natürlich eine präzise Planung nötig, sodass Überraschungen vermieden werden konnten. Zunächst muss also geprüft werden, ob alle beim Apache verwendeten Module auch in ähnlicher Form für lighttpd existieren, was hier der Fall war. Aber jetzt legen wir mal los...
- Nachdem die Ports aktualisiert sind und eine neue Jail erstellt ist, machen wir uns direkt mal an die Installation:
# cd /usr/ports/www/lighttpd/ && make install clean
Folgende Optionen wählen wir im Konfigurationsmenü aus:
[*] BZIP2
[*] CML
[*] MAGNET
[*] MEMCACHE
[*] MYSQL
[*] OPENSSL
[*] WEBDAV - Nachdem lighty installiert ist, müssen wir folgende Zeile in die Datei '/etc/rc.conf' einfügen:
lighttpd_enable="YES" - Jetzt geht es auch schon an die Konfiguration des Servers. Hierbei bietet die Beispielkonfiguration unter '/usr/local/etc/lighttpd.conf.sample' viele Hinweise darauf, wie du was konfigurieren kannst. Folgende Tipps will ich dir zur Konfiguration von lighttpd geben:
- Lade nur die Module die du brauchst, und das ganz am Anfang der Datei
- Binde die MIME-Types per "include"-Befehl ein, das erhöht die Übersichtlichkeit
- Erstelle eine Kopie der Beispielkonfiguration und entferne in deiner Konfiguration alle Teile, die du nicht mehr benötigst. Auch das verbessert die Übersichtlichkeit.
- Jetzt kannst du, nachdem du die entsprechenden Pfade angepasst hast, eigentlich schon statische Seiten aufrufen. Jetzt haben wir zunächst mal eine Basiskonfiguration, die wir in den nächsten Schritten weiter ausbauen werden. Beispielsweise werden wir PHP5 oder Ruby on Rails installieren.
Hinweis: Lese dir die Dokumentationen zu den Modulen auf der Website durch. Diese geben viele sinnvolle Ratschläge, wie du was konfigurieren kannst.
Meine Konfiguration kannst du hier herunterladen: lighttpd.conf
Einen Kommentar hinzufügen
super! vielen dank, das "$|" hat geholfen!
Hi,
Den Referer findest du im access-Log. Was steht denn dort?
Wenn du mein Format verwendest, dann findest du ihn vor dem User-Agent.
Es gibt Browser, die den Referer nicht mitschicken.
Schau mal was dort steht.
EDIT: Füge mal vor dem http:// ein $| (Dollar Pipe) ein.
Grüsse,
Benedikt
Hi Benedikt,
ich habe meinen Apache durch lighttpd ersetzt. Der Server läuft gut! Jedoch habe ich ein Problem mit den Bildern.
Wenn ich deine Config nehme, dann funktionieren bei mir die Bilder nicht. Also Sie werden nicht angezeigt. Ich habe folgenden verdacht:
### PREVENT HOTLINKING ###
$HTTP["referer"] !~ "^(http|https)://(
niessen.in|
serverzeit.de|
blog.niessen.in|
typo.niessen.in
)*" {
url.access-deny = ( ".jpg", ".jpeg", ".png", ".wmv", ".avi", ".mpeg", ".mpg", ".gif", ".mp3", ".mp4", ".mov", ".wma", ".iso" )
}
wenn ich diese Zeilen rausnehme, dann zeigt mein Server die Bilder an. Nehme ich diese Zeile rein, dann funktioniert es nicht. Ich habe natürlich die Domains durch meine ersetzt. Als Fehlermeldung erhaltet ich 403 - Forbidden.. kann der meinen referer nicht auflösen? welche einstellung könnte hier schuld sein?
Apache mit FastCGI habe ich noch nie gemacht. Ich habe früher Apache nur mit mod_php betrieben.
Was sagt den top wenn er so langsam wird?
Wartet lighttpd auf PHP oder ist lighttpd langsam?
Das habe ich schon alles gemacht, aber der Prozess hängt sich einfach auf und das Jail wird auf einmal auch irre langsam (delays beim Tippen über SSH!)
Habe jetzt php4 aus den Ports installiert, haut aber auch nicht hin, Apache parst die Seiten nicht, obwohl IMHO alles richtig eingesellt.
Bleibt wohl nichts anderes als das zeilenweise debuggen...
Übrigens: sehr coole Artikel auf deinen Seiten! Ich werde sicher noch oft hier vorbei schauen!
Schau doch mal in deinem lighttpd-Errorlog oder auch in /var/log/messages.
In der php.ini würde ich dann noch "display_errors" auf "on" setzen und "error_reporting" auf "E_ALL".
Nach einem Neustart des FastCGI-Prozesses solltest du dann was finden.
Hallo,
danke für die schnelle Antwort! Ich habe schnell Apache nachinstalliert, da ich mich nicht allzu lang mit dem Problem aufhalten wollte -> jetzt habe ich das wirkliche Problem lokalisiert: ich habe auf dem Entwicklungssystem nur php4 während auf dem Produktivsystem php5 läuft. Ich habe die höchste Logging Funtkion eingestellt, aber kann nichts feststellen. Wie debuggt man das am besten?
Hi BBKing,
Das Problem mit dem Kommentarfeld liegt an PHP 5.3.2 Leider bin ich noch nicht dazu gekommen sämtliche Skripte auf ihre Tauglichkeit hin zu überprüfen. Kommt noch.
Was dein Problem angeht: Konfiguriere per php.ini deine PHP-Instanz so, dass sie Fehler in eine Datei protokolliert. Welche PHP-Version nutzt du?
Hallo,
bin gerade über deine Seite gestolpert, da ich ein Problem mit ligthy/php-cgi habe:
er funktioniert super, aber nach einigen Seitenaufrufen lädt der Browser ewig. Die gleiche Applikation läuft unter Apache mit dem Apache-php-Modul problemlos, scheint sich mit php-cgi aufzuhängen.
Im lighthtpd.conf habe ich php so eingebunden:
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/local/bin/php-cgi",
"socket" => "/var/run/lighttpd/php-fastcgi.socket"
)))
Im php5-Config habe ich sowohl das CGI als auch das fastCGI Modul aktiviert, weiß aber nicht, ob das so passt?
In den Logs steht leider nichts brauchbares...:/
Irgendeine Idee?
Danke
BBKing
PS: im FF sehe ich die Beschriftungen für die Eingabefelder und Buttons nicht auf dieser Website bzw. einen Fehler: "Error: The expand/collapse plugin requires that both parameters (id,title)" are used.
Hallo Jens,
Freut mich wenn dir das Tutorial hilft.
Nutzt du pound als Reverse-Proxy? Falls nicht, bringt dir dieses Format nichts, dann solltest du den Standard verwenden.
Nutzt du allerdings pound, dann sollte das auch funktionieren, bei mir klappt das bestens.
Hast du irgend einen anderen Proxy dazwischen geschalten?
Grüsse,
Benedikt
Hey,
ich habe jetzt lighttpd am Laufen und muss sagen, dass mir der Webserver sehr gefällt. Das Konfigurieren ist hier irgendwie übersichtlicher. Danke für deine Anleitung!!
Ich habe jedoch mal eine Frage zu:
accesslog.format = "%{X-Forwarded-For}i %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
Woran kann es liegen, dass die IP-Adressen meiner Besucher nicht im LOG angezeigt werden? Ich würde gerne Statistiken anfertigen und im Moment sehe ich hier nichts. Woran könnte das liegen? Ein Idee?
---
Anderes Thema:
Auf deiner Seite habe ich Tomcat als ToDo gesehen. Weißt du, ob man Anfragen von lighttpd ganz einfach an Tomcat weiterleiten kann?
Ansonsten machen weiter so und respekt für die seite! hoffe sie bleibt lange online, damit ich immer wieder was nachlesen kann *g*
VG
Jens
Hi,
Webserver wie immer mit "/usr/local/etc/rc.d/lighttpd start" starten.
FastCGI-Prozesse kannst du mit ps aux auflisten lassen. => Username sagt dir, dass du den richtigen Prozess killst, falls du für jede Website eigene Prozesse hast. Anschliessend mit "kill <PID>" den Prozess killen.
Zu den Logfiles: Da steht doch wo das Problem ist: Der Webserver-User (bspw. www) hat keine Berechtigung in die Datei /var/log/lighttpd.error.log zu schreiben. Diese Berechtigung muss er aber haben. Serverdienste werden in der Regel nicht als root ausgeführt, da viel zu unsicher.
Selbst wenn du root bist verliert der Server seine root-Rechte nach dem Start wieder und läuft unter seinem eigenen, eingeschränkten Benutzer. Der Webserver braucht nur beim Starten root-Rechte, da er sich an einen Port <1024 binden möchte, wofür aus Sicherheitsgründen root-Rechte erforderlich sind.
Ich hoffe ich konnte dir helfen.
Grüsse,
Benedikt
Hi,
ich habe nach deiner Anleitung den Webserver installiert. Wie starte ich eigentlich den Webserver? und Wie kann ich mein Socket wieder freigeben?
Active UNIX domain sockets
Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr
c437bc78 stream 0 0 c4bb3770 0 0 0 /www/vhosts/fastcgi/TEST.de/TEST.de.socket
c437aa80 stream 0 0
---
Ich habe auch Probleme mit den Logs, obwohl ich das als ROOT starte:
### LOG-FILES ###
server.errorlog = "/var/log/lighttpd.error.log"
accesslog.filename = "/var/log/lighttpd.access.log"
accesslog.format = "%{X-Forwarded-For}i %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
# accesslog.format ist umformatiert, da lighttpd hinter pound zum Einsatz kommt, weshalb die IP des Hostsystems eingetragen wuerde.
Wenn ich light starte, dann erscheint:
/usr/local/etc/rc.d/lighttpd start
Starting lighttpd.
foo# 2009-05-25 15:39:05: (log.c.84) opening errorlog '/var/log/lighttpd.error.log' failed: Permission denied
2009-05-25 15:39:05: (server.c.893) Opening errorlog failed. Going down.
was mache ich falsch?