PHP
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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]:
php-fpm (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install php-fpm
Oder mit apturl 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.
Links¶
nginx - Hauptartikel zu nginx hier im Wiki
PHP - Artikel zu PHP hier im Wiki
PHP-FPM 🇩🇪 - PHP-FPM Dokumentation
nginx-wiki 🇬🇧 - Hinweise um Sicherheitsprobleme durch unkontrolliertes Weitergeben von Anfragen zu vermeiden
Beispiel im nginx-Wiki 🇬🇧 zur Konfiguration von nginx mit PHP-FPM