nginx/PHP

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Einen Editor öffnen

  4. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Installation
  2. Konfiguration
    1. PHP-FPM
    2. nginx
  3. Links

nginx verlangt für PHP eine FastCGI-Schnittstelle. Da PHP nicht im Passiv-Modus agiert, müssen - wie bei FastCGI üblich - PHP-Instanzen gestartet werden, die im Arbeitsspeicher auf ihren Einsatz warten. Die einfachste Möglichkeit dies zu erreichen ist die Verwendung des PHP FastCGI Process Managers.

Installation

Hierfür installiert man folgendes Paket[1]:

Paketliste zum Kopieren:

sudo apt-get install php-fpm 

Oder mit apturl die Pakete installieren. Link: apt://php-fpm

Man sollte beachten, dass dieses Paket je nach Ubuntu-Version auf eine andere PHP-Version referenziert, wodurch bei den im Folgenden genannten Pfaden die richtige Versionsnummer eingesetzt werden muss, also z.B. 7.2 für Ubuntu 18.04.

Konfiguration

PHP-FPM

FPM agiert als Dienst und die Konfiguration wird über /etc/php/7.X/fpm/ vorgenommen[3][4]. Die php.ini Datei die das Verhalten der PHP-Instanzen festlegt, die von PHP-FPM gestartet werden, findet sich hier. Außerdem enthält das Verzeichnis die Datei php-fpm.conf, über die allgemeine Einstellungen für PHP-FPM (z.B. Speicherort der Log Dateien) geändert werden können.

Das Verhalten der einzelnen PHP-Instanzgruppen wird über Dateien in /etc/php/7.X/fpm/pool.d/ gesteuert. Der Standardpool heißt www und wird über die Datei www.conf konfiguriert. Hier kann unter anderem die Anzahl der gleichzeitig laufenden bzw. wartenden PHP-Instanzen über die folgenden Parameter eingestellt werden. Hohe Werte führen hier zu einer erhöhten Belastung des Arbeitsspeichers, während zu niedrige Werte dazu führen können, dass die Seite langsam oder auch gar nicht mehr erreichbar ist, da keine PHP-Instanz mehr frei ist um die Anfrage zu verarbeiten.

pm = dynamic/static Dynamische bzw. statische Festlegung der Anzahl der PHP-Instanzen
pm.max_children Anzahl der maximal vorhandenen Instanzen im dynamischen bzw. der insgesamt vorhandenen Instanzen im statischen Fall
pm.start_servers Anzahl der im dynamischen Fall zu startenden Instanzen
pm.min_spare_servers Anzahl der im dynamischen Fall mindestens ungenutzt vorhandenen Instanzen
pm.max_spare_servers Anzahl der im dynamischen Fall maximal ungenutzt vorhandenen Instanzen

Den Service kann man mit[2]:

sudo systemctl restart php7.X-fpm.service 

einfach neu starten bzw. stoppen/starten.

nginx

Um PHP nun mit nginx zu nutzen, muss im Serverblock folgendes stehen:

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
    fastcgi_pass unix:/var/run/php/php7.X-fpm.sock; # Das X hier durch die richtige PHP-Version ersetzen.
    fastcgi_index index.php;
    include fastcgi_params;
}

Diese Konfiguration kann auch entsprechend an eigene Bedürfnisse angepasst werden. Nach einem Neustart von nginx sollte PHP wie gewünscht funktionieren.