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.