WordPress-Installation von Apache 2 auf NGINX umstellen – Teil 2: NGINX für PHP konfigurieren

Erfolgreiche PHP-Konfiguration

Erfolgreiche PHP-Konfiguration

Nach der Installation des NGINX-Servers und des PHP-FPM-Dämons müssen nun beide entsprechend konfiguriert werden. Wir beginnen mit der Konfiguration von PHP-FPM.

PHP-FPM konfigurieren

Die Konfigurationsdateien von PHP-FPM befinden sich unter Ubuntu Linux standardmäßig im Verzeichnis /etc/php5/fpm. In diesem Verzeichnis befindet sich auch eine eigene php.ini, in der ggf. die PHP-Standardeinstellungen bzgl. Beschränkungen der Dateigrößen oder Scriptausführungszeiten modifiziert werden können. Es kann aber auch einfach die bisher mit Apache verwendete Datei übernommen werden.

Aus Sicherheitsgründen sollte der Eintrag cgi.fix_pathinfo auf 0 gesetzt werden (Standardwert ist 1).

Die für das Zusammenspiel mit NGINX relevante Datei ist die Konfigurationsdatei www.conf im Verzeichnis /etc/php5/fpm/pool.d. In dieser Datei wird u.a. konfiguriert wie NGINX und PHP-FPM miteinander kommunizieren sollen. Standardmäßig ist PHP-FPM für die Verwendung von TCP/IP-Sockets konfiguriert. Es ist auf Linux-Systemen jedoch besser stattdessen Unix-Sockets zu benutzen.

Die Datei www.conf, die sehr gut kommentiert ist, enthält bei mir die folgenden geänderten Einträge:

[www]
listen=/tmp/php-fpm.sock
listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data
listen.mode = 0666

user = www-data
group = www-data

pm = dynamic
pm.max_children = 15
pm.start_servers = 6
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
...
Zeilen 2-6:
Diese Zeilen enthalten die notwendigen Änderungen, um Unix-Sockets für die Kommunikation zu verwenden. Der Dateiname in Zeile 2 muss später auch in der NGINX-Konfiguration passend gesetzt werden. Gleiches gilt für die Benutzer- und Gruppeneinstellungen in den Zeilen 4 und 5 sowie 8 und 9. Wenn der NGINX-Server für einen anderen Benutzer konfiguriert wird, dann sollten diese Einstellungen passend geändert werden.
Zeilen 11-16:
Mit den Einstellungen in diesen Zeilen wird u.a. konfiguriert wie viele Prozesse zur Verarbeitung von PHP-Scripten initial und maximal gestartet werden sollen. Die Einstellungen hier hängen u.a. davon ab wie viel Hauptspeicher dem Server zur Verfügung steht und wie häufig er besucht wird. Hier muss man ggf. ein wenig probieren bis man die optimale Einstellung gefunden hat. Die PHP-FPM-Logdatei (/var/log/php5-fpm.log) gibt Hinweise aus wenn die aktuelle Konfiguration nicht optimal ist. In dieser Logdatei landen auch alle PHP-Fehlermeldungen.

Nach jeder Änderung an der Konfiguration muss der PHP-FPM-Dämon neu gestartet werden, z.B. via:

sudo service php5-fpm restart

Weitere Informationen gibt es auf der Website zu PHP-FPM.

NGINX-Server konfigurieren

Die NINX-Konfigurationsdateien befinden sich unter Ubuntu im Verzeichnis /etc/nginx. Die Haupt-Konfigurationsdatei ist nginx.conf. Sie inkludiert standardmäßig alle Dateien in den Unterverzeichnissen conf.d sowie sites-enabled. sites-available enthält - ähnlich wie bei Apache - pro Website eine Konfigurationsdatei und sites-enabled symbolische Links auf die Website-Konfigurationen, die aktiv sein sollen.

Details zu der NGINX-Konfiguration gibt es im nächsten Teil dieses Tutorials, jetzt beschränke ich mich erst einmal auf das Nötigste für die PHP-Konfiguration.

Als erstes habe ich eine neue Datei im Unterverzeichnis /etc/nginx/conf.d angelegt. Ich habe diese Datei php-fpm.conf genannt. Die Speicherung in einer separaten Datei ist nicht zwingend notwendig, aber es erleichtert die Wartung.

Die neu angelegte Datei hat bei mir den folgenden Inhalt:

upstream php  {
   server unix:/tmp/php-fpm.sock;
}

Der Dateiname in Zeile 2 muss dabei unbedingt übereinstimmen mit dem Dateinamen in Zeile 2 der Datei www.conf.

Für einen Test ob PHP wirklich funktioniert muss jetzt noch die Konfigurationsdatei der Standard-Website angepasst werden. Dazu muss die Datei /etc/nginx/sites-available/default bearbeitet werden. Diese Datei enthält bereits einen auskommentierten Block für die PHP-Konfiguration. Der Block beginnt mit location ~ \.php$ {. Für die Aktivierung von PHP habe ich die Kommentarzeichen entfernt und die Konfiguration dann wie folgt angepasst:

location ~\.php$ {
   try_files $uri =404;
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   include fastcgi_params;
   fastcgi_index index.php;
   fastcgi_pass php;
}

Der Eintrag in Zeile 6 stellt übrigens die Verbindung zur Konfiguration in der Datei php-fpm.conf her.

Damit der NGINX-Server die modifizierte Konfiguration auch lädt, muss er neu gestartet werden. Da der Server bei Fehlern in der Konfiguration nicht neu startet, sollte man immer erst verifizieren ob die Konfiguration korrekt ist:

sudo nginx -t

Werden hier keine Fehlermeldungen ausgegeben, so kann der NGINX-Server neu gestartet werden. Es ist jedoch sehr wahrscheinlich, das diese Fehlermeldung erscheint:

nginx: [emerg] unknown "https" variable

Die einfachste Lösung besteht darin, die Datei /etc/nginx/fastcgi_params zu editieren und dort den Eintrag fastcgi_param HTTPS ... durch Voranstellen eines # auszukommentieren. Danach dürfte keine Fehlermeldung mehr auftreten und der NGINX-Server kann neu gestartet werden:

sudo service nginx restart

Um zu testen, ob die PGP-Konfiguration auch wirklich OK ist, wird noch eine PHP-Datei im Verzeichnis der Default-Website benötigt. Standardmässig ist dies das Verzeichis /usr/share/nginx/www. Für einen ersten Test reicht eine PHP-Datei test.php mit folgendem Inhalt:

<?php phpinfo(); ?>

Öffnet man jetzt einen Browser mit der URL http://127.0.0.1:85/test.php sollte eine Anzeige wie in der Hardcopy am Anfang dieses Artikels erscheinen.

Die weiteren Teile dieser Artikelreihe:

comments powered by Disqus