Webserver Nginx mit PHP-FPM installieren

By | 17. Dezember 2011

Heute habe ich mal etwas mit dem nginx-Webserver gespielt. Nginx hat ja den Ruf Ressourcen schonender zu sein als der Apache. Dafür habe ich genau den richtigen root-Server zur Hand. Mit gerade mal 250MB RAM muss hier auf jedes MB-Speicher geachtet werden.
Als erstes habe ich den Server komplett neu mit Debian (Lenny) aufgesetzt. Es sollte noch nichts weiter installiert sein.

sources.list anpassen

Als aller erstes müssen wir zwei Quellen in die /etc/apt/sources.list aufnehmen. In den Standart-Repository finden wir leider nicht das notwendige php5-fpm-Paket.


deb http://packages.dotdeb.org lenny all 
deb-src http://packages.dotdeb.org lenny all 
deb http://php53.dotdeb.org lenny all 
deb-src http://php53.dotdeb.org lenny all 

da die Quelle signiert ist laden und importieren wir den Schlüssel


wget http://www.dotdeb.org/dotdeb.gpg 
cat dotdeb.gpg | apt-key add - 

danach werden die Pakete-Quellen eingelesen und upgedatet:


apt-get update 
apt-get upgrade 

Nun sollte unser System auf dem aktuellen Stand sein und die eigentliche Installation kann beginnen.

Nginx installieren


apt-get install nginx 

der Server wird durch die Installation gestartet und sollte uns jetzt mit der default-Seite begrüßen.

jetzt die wichtigsten PHP5 Sachen


apt-get install php5-cli php5-common php5-suhosin a
pt-get install php5-fpm php5-cgi php5-apc php5-gd 

wer kein apc verwenden möchte, kann das natürlich weglassen oder php5-xcache laden

jetzt noch mySQL und wir sind fast fertig


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

Unsere Umgebung ist jetzt soweit fertig. Der PHP-FPM hört standardmäßig auf 127.0.0.1:9000
Nun geht es an das Feintunig:
die PHP.ini welche für FPM genutzt wird findet Ihr unter


/etc/php5/fpm/php.ini

sämtliche PHP-Erweiterungen legen ihre Config Path


/etc/php5/conf.d

Nun beginnt die eigentliche Arbeit, das Feintunig. „Out of the Box“ läuft der Server zwar schon einigermaßen, aber ich bevorzuge eigentlich xCache. Ich werde mal versuchen beide PHP-Cache-Systeme auf diesem Server zu vergleichen.
Dazu schreibe ich aber eventuell etwas in einem späteren Beitrag :P

Ein erster Test mit ApacheBench zeigt aber auch gleich ein gravierendes Problem: Bei zu vielen gleichzeitigen Request startet der PHP5-FPM zu viele Clientprozesse und zwingt das System zum swapen da der RAM nicht mehr ausreicht.

Also habe ich schon mal erste Eingriffe an der Konfiguration vorgenommen:
/etc/php5/fpm/pool.d/www.conf


pm = dynamic

#maximale Anzahl der Client-Prozesse:
pm.max_children = 20

#starte mit 2 Prozessen:
pm.start_servers = 2

# Anzahl der Prozesse auf die zurückgefallen wird,
#wenn zuvor mehr Prozesse benötigt wurden:
pm.min_spare_servers = 2

#halte 2 untätige Prozesse in Reserve
pm.max_spare_servers = 2

Somit kann dieser Server bei maximal 20 gleichzeitigen Anfragen, etwa 3 Anfragen pro Sekunde bearbeiten. Das ist nicht viel aber für einen Webserver mit einem AMD Athlon XP 1600+, SingleCore & 250MB-RAM schon nicht schlecht.