[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] [: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]: {{{#!vorlage Paketinstallation php-fpm, universe }}} 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 [:Dienste: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. {{{#!vorlage Tabelle `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]: {{{#!vorlage Befehl 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. = Links = * [:nginx:] - Hauptartikel zu nginx hier im Wiki * [:PHP:] - Artikel zu PHP hier im Wiki * [https://secure.php.net/manual/de/install.fpm.php PHP-FPM] {de} - PHP-FPM Dokumentation * [https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/?highlight=php#passing-uncontrolled-requests-to-php nginx-wiki] {en} - Hinweise um Sicherheitsprobleme durch unkontrolliertes Weitergeben von Anfragen zu vermeiden * [https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi Beispiel im nginx-Wiki] {en} zur Konfiguration von nginx mit PHP-FPM #tag: Server, PHP