Installation Lighttpd mit PHP-FPM und MySQL

Lighttpd a.k.a. Lighty ist die schlanke Variante eines Webservers. Er hält sich mit Loggings zurück und verzichtet auf nützliche aber performance-killende Gimmicks wie das Parsen von .htaccess-Dateien usw.
Dadurch ist er gerade für umfangreiche Webauftritte die ideale Lösung.

Diese Anleitung zeigt am Beispiel eines Ubuntu 12.04-Servers, wie man den Lighty installiert, konfiguriert und mit den nötigen Modulen wie PHP-FPM, Rewrite-Funktionen und MySQL-Unterstützung versieht.

Installation des Lighty-Pakets

apt-get install lighttpd

Jetzt wird beim Aufruf von http://[FQDN des Servers] bereits die Standard-Seite ausgeliefert.
Nun sollte man in der Lighttpd-Config in /etc/lighttpd/lighttpd.conf auf jeden Fall den Schalter

server.dir-listing          = "enable"

deaktivieren, sodass die entsprechende Zeile dann folgendermaßen aussieht:

server.dir-listing          = "disable"

Das deaktiviert das Directory-Listing, das bei Verzeichnissen ohne Index-File einfach nur den Inhalt des Verzeichnisses anzeigt.

Sinnvoll ist es, an dieser Stelle auch gleich das Rewrite-Modul zu aktivieren. Die zugehörige Zeile ist bereits in der Default-Konfiguration enthalten und muss nur einkommentiert werden:

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
        "mod_rewrite",
)

Als weiterer Schritt ist es sinnvoll, die folgende Zeile in die Konfiguration aufzunehmen:

server.tag                  = "[beliebiger String, der im Header als Webserver mitgesandt wird]"

Unser Lighty outet sich nun nichtmehr als Lighty sodass evtl. vorhandene Sicherheitslücken nichtmehr so leicht ausgenutzt werden können.

Installation von PHP-FPM

Zuerst installiert man die benötigten Pakete:

apt-get install php5-fpm php5

Nach erfolgreicher Installation ist es notwendig, den Schalter

cgi.fix_pathinfo=1

in /etc/php5/fpm/php.ini einzukommentieren, sprich das „;“ vor dem Schalter zu entfernen.
In der gleichen Datei ändert man den Schalter

expose_php = On

in

expose_php = Off

Damit sendet auch PHP nichtmehr alle Details im X-Powered-By-Header sondern bleibt inkognito.

Standard-mäßig lauscht PHP-FPM auf einer TCP-Verbindung. Das ist für den Bau von Clustern ganz nett, bei Einzelservern führt dies allerdings zu unnötigem TCP-Overhead, sodass es mir sinnvoller erscheint, auf einem UNIX-Socket zu lauschen. Um dies zu realisieren, modifiziert man die Datei /etc/php5/fpm/pool.d/www.conf folgendermaßen:
Die Zeile

listen = 127.0.0.1:9000

wird auskommentiert und dafür die Zeile

listen = /tmp/php5-fpm.sock

eingefügt. Damit weiß PHP-FPM, dass es nichtmehr auf einem TCP-Port sondern auf einem Socket lauschen soll. Das muss man natürlich auch dem Lighty noch mitteilen. Dies erreicht man, indem man die Konfiguration in /etc/lighttpd/conf-available/15-fastcgi-php.conf so modifiziert, dass sie schlussendlich folgendermaßen aussieht:

# /usr/share/doc/lighttpd-doc/fastcgi.txt.gz
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions#mod_fastcgi-fastcgi

## Start an FastCGI server for php (needs the php5-cgi package)
fastcgi.server += ( ".php" =>
        ((
                "socket" => "/tmp/php5-fpm.sock",
                "broken-scriptfilename" => "enable"
        ))
)

Abschließend klinkt man die Module in den Lighty ein:

lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php

Startet man nun PHP5-FPM und den Lighty neu und platziert eine PHP-Datei mit „phpinfo()“ im Document Root, wird man feststellen, dass unser Lighty nun auch PHP spricht.

MySQL installieren

MySQL zu installieren ist denkbar einfach:

apt-get install mysql-server mysql-client php5-mysql

Das wars schon, sehr nützlich ist stets ein PHPMyAdmin, dies installiert man sinnvollerweise updatefähig mit

apt-get install phpmyadmin

WICHTIG: Bei der Frage, welcher Webserver automatisch konfiguriert werden soll, natürlich „Lighttpd“ markieren.
Die Frage, die PHPMyAdmin-Datenbank mit dbconfig-common zu konfigurieren, mit „Yes“ beantworten.
Die Frage nach „MySQL application password for phpmyadmin“ mit einem leeren String beantworten, dadurch wird ein zufälliges Passwort erzeugt.

Nach Abschluss der Installation MUSS unter der URL

http://[fqdn]/phpmyadmin/

der Login-Screen von PHPMyAdmin erreichbar sein

Die meistgenutzten PHP-Module können nun ohne großes Aufhabens via

apt-get install php5-curl php5-gd php-pear php5-mcrypt

installiert werden.

Abschließen installiert man noch XCache, einen OpCode-Cacher für PHP. Mit diesem scheint TYPO3 bisher kein Problem zu haben, aber was nicht ist, kann ja noch werden.

apt-get install php5-xcache

Der Suhosin-Patch wird mit PHP-FPM bereits mitinstalliert, mehr Sicherheit bietet aber die Suhosin-Extension, da sie konfigurierbar ist und mehr Möglichkeiten bietet.
Die Installation erfolgt folgendermaßen (vorher prüfen, ob ggfs. eine neue Stable-Version verfügbar ist):

apt-get install make
cd /usr/local/src
wget http://download.suhosin.org/suhosin-0.9.33.tgz
tar -xzf suhosin-0.9.33.tgz
cd suhosin-0.9.33/
phpize
./configure --enable-suhosin --with-php-config=/usr/bin/php-config
make
make install

Eval ist eines der größten Einfallstore, wenn es um die Kompromittierung von Webservern geht
Da dies in PHP allerdings keine Funktion im eigentlichen Sinne ist sondern ein Sprachkonstrukt, kann es nicht einfach über den Schalter „disable_functions“ deaktiviert werden. Um diesem Thema Herr zu werden brauchen wir Suhosin. Um die Extension einzubinden und konfigurierbar zu machen, geht man wie folgt vor:

cd /etc/php5/conf.d/
touch suhosin.ini

In die suhosin.ini (diese wird beim Start von PHP-FPM automatisch geparst) nun folgendes eintragen:

extension="suhosin.so"
[suhosin]
# Werden "trim", "file_get_contents", "implode", "realpath" und "is_readable" nicht gewhitelistet,
# wird PHPMyAdmin nicht funktionieren
suhosin.executor.eval.whitelist=trim,file_get_contents,implode,realpath,is_readable
suhosin.mail.protect = 1
suhosin.get.max_value_length=2000

Die verfügbaren Schalter und deren Auswirkungen kann man hier nachlesen.

Nun noch PHP-FPM neustarten und damit die neuen Module inkl. Suhosin laden

/etc/init.d/php5-fpm restart

Soll ein TYPO3 auf dem System installiert werden, brauchen wir jetzt nur noch ImageMagick und grundlegende Email-Funktionalität

apt-get install imagemagick sendmail

Die weiteren Anpassungen erfolgen nun anhand der jeweiligen Anforderungen.

Eine Antwort to “Installation Lighttpd mit PHP-FPM und MySQL”

  1. avatar

    […] mit Mod-PHP oder Lighttpd mit PHP-FPM. Die Installation eines Lighty mit allem drum und dran ist in einem anderen Beitrag ausführlich […]

Schreibe einen Kommentar