PHP-FPM unter Linux konfigurieren

PHP-FPM unter Linux konfigurieren

Read 9 minutes

Wir werden nicht auf die Grundeinstellungen des Nginx-Servers selbst und seine Funktionalität eingehen, das haben wir bereits in unserem vorherigen Artikel getan. Aber einige Parameter müssen berücksichtigt werden.

Definieren und bestimmen Sie die Anzahl der Handler und die Anzahl der Verbindungen pro Prozessor. Zu diesem Zweck werden wir in der Datei /etc/nginx/nginx.conf die Werte angeben:

worker_processes 1; worker_connections 1024;

Die Grundidee bei der Wahl dieser Werte ist, dass die Anzahl der bedienten Clients gleich der Anzahl der Handler multipliziert mit der Anzahl der Verbindungen für jeden Prozessor ist. In unserem Fall sind es also 1.024 Clients. Um Eingabe-Ausgabe-Probleme zu vermeiden, folgen Sie der Regel 1 des Prozessors pro Prozessorkern. Sie können die Anzahl der Kerne per Befehl ermitteln:

cat /proc/cpuinfo | grep prozessor prozessor : 0

Mein Prozessor hat einen Kern. Daher ist die Anzahl der Prozessoren eins. Die Anzahl der Verbindungen kann je nach Bedarf hinzugefügt werden. Dieser Parameter ist in der Praxis bereits ausgewählt.

Zur Sicherheit kann die Direktive aktiviert werden

server_tokens aus

Aus dem Handbuch: "Erlaubt oder verbietet die Ausgabe der Nginx-Version in Fehlermeldungen und im Feld "Server" des Antworttitels."

Diese Direktive wird in den Abschnitt http/server/local der Konfigurationsdatei eingefügt.

Legen wir die Größe der vom Server übertragenen Daten fest:

client_max_body_size 20m; client_body_buffer_size 128k;

Diese Direktive wird in den Abschnitt http/server/local der Konfigurationsdatei eingefügt.

Konfigurieren Sie den Cache für statische Dateien. Dies dient dazu, Server-Ressourcen und Bandbreite zu sparen. Deaktivieren Sie die Protokollierung und setzen Sie das Verfallsdatum des Headers für statische Dateien auf 100 Tage.

location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; }

Um mit PHP-FPM zu interagieren, können Sie einen Unix-Socket angeben. Dazu müssen wir einen Eintrag in unsere Konfigurationsdatei machen:

# PHP-Skripte an PHP-FPM übergeben ~* \.php$ { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; }

In den PHP-FPM-Einstellungen sollten Sie angeben, dass die IP-Adresse und der Port, die in unserer Konfiguration angegeben sind, überwacht werden sollen. Dies geschieht durch die Listening-Direktive in der Pool-Konfigurationsdatei.

Aus Sicherheitsgründen können Sie den Zugriff auf versteckte Dateien verhindern.

location ~ /\. { access_log off; log_not_found off; deny all; }

Die PHP-FPM-Konfiguration selbst kann in 2 Schritte unterteilt werden: Setzen der globalen Parameter, was in der Datei

/etc/php5/fpm/php-fpm.conf

und die Pool-Konfiguration. Die Pool-Konfiguration wird in den Verzeichnisdateien

/etc/php5/fpm/pool.d/

Globale Parameter sind nicht so interessant und können in der Dokumentation nachgelesen werden, aber die Hauptparameter der Konfiguration von Pools werden wir betrachten.

Jeder Pool wird mit einer eigenen Datei konfiguriert. Wenn Sie ein Kommando ausführen

ls -l /etc/php5/fpm/pool. d/

aufrufen, werden Sie sehen, dass das System bereits eine Konfigurationsdatei für den www-Pool hat. Schauen wir uns die Konfiguration in ihrem Beispiel an.

Ein wichtiger Punkt in der Konfiguration ist die Auswahl der Anzahl der Handler, die zur Ausführung von PHP-Skripten verwendet werden. Ihre Anzahl muss mit Bedacht gewählt werden. Zu wenige Handler erlauben keine effiziente und schnelle Bearbeitung von Anfragen, aber zu viele erschöpfen die Ressourcen, die der Server für andere Aufgaben benötigt. Die Anzahl der Prozessoren sollte unter dem Gesichtspunkt gewählt werden, dass selbst bei Spitzenanfragen an den Server die Auslastung seiner Ressourcen in vernünftigen Grenzen bleibt und nicht zu seiner Überlastung führt.

Werfen wir nun einen Blick auf die Konfigurationsdatei und geben wir die folgenden Optionen an. Ach ja, in der Konfigurationsdatei sind die Zeilen, die mit dem Symbol ";" beginnen, Kommentare und gelten nicht als Direktiven.

Geben Sie den dynamischen Modus für die Erstellung von Prozessen an, so dass die Anzahl der gestarteten PHP-FPM-Prozesse direkt von der Belastung des Servers abhängt.

pm = dynamisch

Legen Sie die maximale Anzahl der Kindprozesse fest.

pm.max_children = 6

Als nächstes müssen Sie die Anzahl der Kindprozesse angeben, die gestartet werden, sobald der Server geladen ist. Standardmäßig ist dieser Wert 2. Sie können ihn erhöhen, wenn die Ressourcen es zulassen; setzen wir ihn auf 3.

pm.start_servers = 3

Sie sollten auch die Mindest- und Höchstzahl der Prozesse im Leerlauf angeben. Die Mindestanzahl entspricht der Anzahl der Prozesse, die beim Booten des Servers laufen. Die maximale Anzahl wird so festgelegt, dass sie die maximal zulässige Anzahl von Kindprozessen nicht überschreitet.

pm.min_spare_servers = 3 pm.max_spare_servers = 5

Diese Werte werden als Beispiel und zur Erläuterung angegeben. In jeder spezifischen Situation können sie jedoch variieren. Die optimalen Werte hängen von den Fähigkeiten und verfügbaren Ressourcen des Servers, der Anzahl und Komplexität des PHP-Codes, der Anzahl der Abfragen und der Belastung des Servers ab. Diese Parameter können nur durch praktische Anwendung und Tests der erstellten Website ermittelt werden.

Betrachten wir nun die spezifischen Einstellungen.

Zunächst konfigurieren wir die Protokollierung von Informationen über Skripte, die langsam laufen. Diese Informationen werden nützlich sein, um die Gründe für die Verzögerungen auf der Website zu klären. Zunächst legen wir einen Zeitschwellenwert fest, ab dem die Ausführung des Skripts als langsam gilt.

request_slowlog_timeout = 10s

Die Zeiteinheiten können in Sekunden (s), Minuten (m), Stunden (h) oder Tagen (d) angegeben werden. Wir haben eine Zeit von 10 Sekunden angegeben.

Jetzt geben wir auch den Namen der Datei an, in die die Informationen gesendet werden sollen.

slowlog = /var/log/slowphp.log

Diese Datei kann nun für die Untersuchung von "langsamen" Skripten verwendet werden.

Wenn Sie Skripte in einer isolierten Umgebung oder einer Chroot-Umgebung ausführen möchten. Diese Option wird normalerweise aus Sicherheitsgründen verwendet. Um diese Funktion zu aktivieren, müssen Sie die chroot-Option aktivieren.

Wenn Sie diese Option setzen, sollten Sie daran denken, dass dies Änderungen in der Verarbeitung von PHP-Skripten mit sich bringt.

Alle Dateipfade werden nun relativ zum angegebenen Verzeichnis betrachtet, und PHP-Skripte können nicht auf Sockets zugreifen, die sich außerhalb des angegebenen Verzeichnisses befinden.

Um mehrere Sites zu verwalten, müssen Sie möglicherweise zusätzliche Pools hinzufügen. Auf diese Weise können Sie die Einstellungen für jede einzelne Site individuell konfigurieren. Um einen zusätzlichen Pool zu erstellen, kopieren Sie unsere Datei

/etc/php5/fpm/pool.d/www.conf

unter einem neuen Namen, zum Beispiel

/etc/php5/fpm/pool.d/www2.conf

Öffnen Sie eine neue Datei und ändern Sie den Namen des Pools. Ändern Sie dazu oben in der Datei die Zeile [www] in [www2].

Und ändern Sie die Zeile:

listen = /var/run/php5-fpm.sock

auf

listen = /var/run/www2.sock

Wenn wir wollen, dass der Handler auf das Paar ip:port lauscht, sieht die listen-Anweisung wie folgt aus

lauschen = 127.0.0.1:9000

Dann starten wir den Dienst neu

/etc/init. d/php5-fpm restart