Sichere PHP-Ausführung: Professionelle Einrichtung von PHP-FPM mit NGINX

watch 7m, 28s
views 2

10:13, 19.08.2026

Artikel Inhalt
arrow

  • So funktioniert PHP-FPM hinter den Kulissen
  • Voraussetzungen vor der Konfiguration von PHP-FPM mit NGINX
  • Schritt-für-Schritt-Anleitung zur Einrichtung von PHP-FPM mit NGINX
  • Schritt 1: Installation von PHP-FPM auf Ihrem Server
  • Schritt 2: Einrichten des PHP-FPM-Pools
  • Schritt 3: Konfiguration von NGINX für die Verwendung von PHP-FPM
  • Schritt 4: Überprüfung der PHP-FPM- und NGINX-Integration
  • Häufige Fragen und Fehlerbehebung
  • Was ist PHP-FPM und warum sollte man es mit NGINX kombinieren?
  • Wie kann ich NGINX korrekt mit PHP-FPM verknüpfen?
  • Wann sollte ich in PHP-FPM einen Socket anstelle eines Ports verwenden?
  • Was verursacht einen 502 Bad Gateway-Fehler und wie behebe ich ihn?
  • Kann ich mehrere PHP-Versionen in einer NGINX-Konfiguration ausführen?
  • Wo finde ich die PHP-FPM-Pool-Einstellungen?
  • Was sind die bewährten Vorgehensweisen zur Steigerung der PHP-FPM-Leistung?
  • Abschließende Gedanken

PHP-FPM ist ein Prozessmanager, der für die Bearbeitung von Webanfragen erforderlich ist. Dieser Ansatz ist deutlich schneller als herkömmliche CGI-Methoden wie mod_php oder SUPHP. Der größte Vorteil dieser Methode besteht darin, dass sie weniger CPU-Leistung und Arbeitsspeicher benötigt.  

So funktioniert PHP-FPM hinter den Kulissen

Um besser zu verstehen, wie das Ganze funktioniert, werfen wir einen Blick hinter die Kulissen. Hier sind die wichtigsten Schritte der Funktionsweise:

  1. Bearbeitung der Anfrage. Wenn die Anfrage von einem PHP-Skript beim Server eingeht, wird sie über FastCGI an PHP-FPM weitergeleitet.
  2. Prozessverwaltung. Nach dem Empfang der Anfrage wählt PHP-FPM einen verfügbaren Prozess aus dem Pool aus, um die Anfrage zu bearbeiten. Falls kein Prozess verfügbar ist, kann ein neuer erstellt werden.
  3. Es ist möglich, verschiedene Arten von Prozessen zu verwalten, wie z. B. Master- und Worker-Prozesse. Der Master-Prozess ist erforderlich, um auf eingehende Anfragen zu warten und diese an die verfügbaren Worker-Prozesse zu verteilen. Der Worker-Prozess ist für die Ausführung der PHP-Skripte erforderlich. Er kann in verschiedenen Modi arbeiten, z. B. statisch, dynamisch und bedarfsgesteuert.
  4. Ausführung. Wenn die Anfrage den Worker-Prozess erreicht, wird das PHP-Skript ausgeführt und eine Ausgabe an den Server gesendet.
  5. Wiederverwendung des Prozesses. Die Worker-Prozesse können nach einer bestimmten Anzahl von Anfragen recycelt werden. Dies ist zur Vermeidung von Speicherlecks erforderlich

Voraussetzungen vor der Konfiguration von PHP-FPM mit NGINX

-        Eine SSH-Sitzung auf Ihrem System kann mit dem Benutzer „sudo“ oder dem Root-Benutzer geöffnet werden.

-        Installation von PHP und NGINX auf Ihrem System. Falls noch nicht vorhanden, gibt es verschiedene detaillierte Anleitungen zum Installationsprozess.

Schritt-für-Schritt-Anleitung zur Einrichtung von PHP-FPM mit NGINX

-        Installation von PHP-FPM

-        Einrichtung des PHP-FPM-Pools

-        Konfiguration von NGINX für die Verwendung von PHP-FPM

-        Überprüfung der Integration von PHP-FPM und NGINX

Schritt 1: Installation von PHP-FPM auf Ihrem Server

Das PHP-Skript konnte unter NGINX nicht ausgeführt werden, da für eine effektive Verwaltung PHP-FPM erforderlich ist. PHP-FPM arbeitet außerhalb von NGINX, indem es einen eigenen Prozess erstellt. Wenn der Benutzer versucht, eine PHP-Seite aufzurufen, leitet der Server diese Anfrage an PHP-FPM weiter.

Der Installationsvorgang unter Ubuntu hängt von der jeweiligen Ubuntu-Version und der PHP-Version ab. Sobald Sie überprüft haben, ob Sie über die neueste PHP-Version verfügen, können Sie den folgenden Befehl für die FPM-Installation verwenden:

sudo apt install -y php8.2-fpm

Nach Ausführung des obigen Befehls startet der Server nach der Installation automatisch. Verwenden Sie zur Überprüfung den folgenden Befehl:

sudo systemctl status php8.2-fpm

Schritt 2: Einrichten des PHP-FPM-Pools

Der Standard-Pool befindet sich im Ordner /etc/php/8.2/fpm/pool.d/ und kann an Ihre Anforderungen angepasst werden. Ein gängigerer Ansatz ist jedoch die Erstellung separater Pools, um eine bessere Kontrolle über jeden einzelnen FPM-Prozess zu erlangen. Jeder Pool verfügt über einen eigenen Master-Prozess, und jede PHP-Anwendung kann mit einem eigenen Cache konfiguriert werden. Dies ist ein recht praktischer Ansatz, da die Pools voneinander getrennt sind und Änderungen an einem Pool keine Auswirkungen auf die anderen haben.

Erstellen wir nun einen FPM-Pool, um die App über einen separaten Benutzer auszuführen. Zunächst erstellen wir einen neuen Benutzer:

# Erstellen einer Systemgruppe namens „wordpress“

sudo groupadd --system wordpress

# Erstellen Sie einen Systembenutzer namens „wordpress“, ordnen Sie ihn der Gruppe „wordpress“ zu und legen Sie keine Login-Shell fest

sudo useradd --system --gid wordpress --shell /usr/sbin/nologin --home-dir /var/www/wordpress wordpress

Im nächsten Schritt wechseln Sie in das Konfigurationsverzeichnis und erstellen mit einem Texteditor eine Konfigurationsdatei:

# cd /etc/php/8.2/fpm/pool.d

# vi wordpress_pool.conf

[wordpress_site]

user = wordpress

group = wordpress

listen = /run/php/php8.2-fpm-wordpress.sock

listen.owner = www-data

listen.group = www-data

 

php_admin_value[disable_functions] = exec,passthru,shell_exec,system

php_admin_flag[allow_url_fopen] = off

 

pm = dynamic

pm.max_children = 75

pm.start_servers = 10

pm.min_spare_servers = 5

pm.max_spare_servers = 20

pm.process_idle_timeout = 10s

Lassen Sie uns einige der oben genannten Werte näher erläutern:

-        [wordpress_site]: Hier sollte ein eindeutiger Name für den Pool angegeben werden.

-        Benutzer/Gruppe: Geben Sie an, unter welchem Benutzer oder welcher Gruppe der Pool ausgeführt werden soll.

-        Listen: Name der Socket-Datei.

-        Listen.owner/group: Muss mit dem Benutzer/der Gruppe von NGINX übereinstimmen.

-        Admin_value/flag: Ermöglicht die Einstellung benutzerdefinierter Werte und boolescher Flags.

-        pm: Bei Auswahl von „Dynamic“ wird die Anzahl der untergeordneten Prozesse anhand der folgenden Direktiven festgelegt.

-        max_children: Die maximale Anzahl an untergeordneten Prozessen, die gleichzeitig aktiv sein können.

-        start_servers: Die Anzahl der beim Start erstellten untergeordneten Prozesse.

-         max/min_spare_servers: Die maximale und minimale Anzahl von Kindprozessen im Leerlaufzustand.

-        idle_timeout: maximale Anzahl inaktiver Serverprozesse.

Außerdem ist es möglich, zwischen statischen und bedarfsgesteuerten Einstellungen zu wählen. Bei der statischen Option gibt es eine feste Anzahl von Prozessen, während bei der bedarfsgesteuerten Option für neue Anfragen weitere Prozesse erstellt werden.

Sobald Sie die Konfigurationsdatei fertiggestellt haben, starten Sie den FPM-Dienst neu:

sudo systemctl restart php8.2-fpm

Schritt 3: Konfiguration von NGINX für die Verwendung von PHP-FPM

Der nächste Schritt ist die Erstellung des NGINX-Serverblocks. Dazu müssen Sie die NGINX-Konfigurationsdatei bearbeiten und den Pfad zur Socket-Datei des Pools über `fastcgi_pass` wie folgt hinzufügen:

location ~ \.php$ {

    fastcgi_split_path_info ^(.+\.php)(/.+)$;

    fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock;

    fastcgi_index index.php;

    include fastcgi.conf;

}

Starten Sie anschließend NGINX neu:

sudo nginx -t

sudo systemctl reload nginx

Schritt 4: Überprüfung der PHP-FPM- und NGINX-Integration

Um zu überprüfen, ob die Konfigurationsdatei tatsächlich den neuen Pool verwendet, muss im Stammverzeichnis eine PHP-Info-Datei erstellt werden.

# Wechseln Sie in das WordPress-Verzeichnis

cd /var/www/html/wordpress

# Erstellen Sie eine PHP-Info-Datei mit sicherer Anführungszeichenverwendung

echo '<?php phpinfo(); ?>' | sudo tee info.php > /dev/null

Sobald die Info-Seite erstellt ist, überprüfen Sie die Werte. Wenn diese mit den Angaben in der FPM-Konfigurationsdatei übereinstimmen, funktioniert alles wie vorgesehen.

Häufige Fragen und Fehlerbehebung

Was ist PHP-FPM und warum sollte man es mit NGINX kombinieren?

PHP-FPM ist ein Prozessmanager, der für die Verwaltung von PHP-Prozessen erforderlich ist. In Kombination mit NGINX kann er die Sicherheit, die Leistung und die Verwaltung der Ressourcen erheblich verbessern.

Wie kann ich NGINX korrekt mit PHP-FPM verknüpfen?

Für die Verknüpfung muss NGINX so konfiguriert werden, dass es PHP-FPM verwendet. Dies geschieht durch Einfügen der Anweisung „fastcgi_pass“ in die Konfigurationsdatei. Dies kann wie folgt erfolgen:

location ~ \.php$ {

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock;

fastcgi_index index.php;

include fastcgi.conf;

}

Wann sollte ich in PHP-FPM einen Socket anstelle eines Ports verwenden?

Die Verwendung von Sockets ermöglicht eine schnellere Kommunikation, da kein Netzwerk-Overhead entsteht. Ein Port erfordert Netzwerkkommunikation, und ein solcher Ansatz ist deutlich langsamer. Dennoch kann die Verwendung von Ports in solchen Fällen sinnvoll sein, in denen FPM auf verschiedenen Containern oder Servern läuft.

Was verursacht einen 502 Bad Gateway-Fehler und wie behebe ich ihn?

Um diesen Fehler zu beheben, ist es entscheidend zu überprüfen, ob FPM läuft und ob TCP oder Socket in der NGINX-Konfiguration korrekt angegeben ist. Überprüfen Sie die FPM-Protokolle auf mögliche Probleme und passen Sie die Pool-Einstellung entsprechend an. Überprüfen Sie außerdem, ob die NGINX-Konfiguration PHP-Anfragen korrekt weiterleitet.

Um die Protokolle zu überprüfen, verwenden Sie den folgenden Befehl:

tail -f /var/log/php8.2-fpm.log

Kann ich mehrere PHP-Versionen in einer NGINX-Konfiguration ausführen?

Ja, dies ist möglich, indem Sie separate Pools konfigurieren und für jede Domain/Subdomain den richtigen Pool angeben. Wenn Sie beispielsweise PHP 7.4 und 7.2 verwenden, ist dies möglich. Legen Sie anschließend für jede Domain den richtigen Pool fest. 

Wo finde ich die PHP-FPM-Pool-Einstellungen?

Normalerweise befindet sich der Pool unter /etc/php/8.2/fpm/pool.d/.

Was sind die bewährten Vorgehensweisen zur Steigerung der PHP-FPM-Leistung?

Für eine bessere Leistung müssen Sie möglicherweise die Werte für pm.min_spare_servers, pm.max_children und pm.start_servers in der Konfiguration anpassen. Außerdem können Sie versuchen, „pm.status_path“ und „pm.max_requests“ zu aktivieren.

Abschließende Gedanken

In diesem Artikel haben wir praktisch gezeigt, wie man separate Pools konfiguriert, PHP-FPM installiert, den NGINX-Serverblock konfiguriert und eine Verbindung zum Dienst herstellt. Mit diesem Ansatz lassen sich eine bessere Skalierbarkeit und Sicherheit gewährleisten sowie die Leistungsmerkmale verbessern. Nun wissen Sie, wie Sie Serverressourcen optimal zuweisen können.

Teilen

War dieser Artikel für Sie hilfreich?

VPS beliebte Angebote

-13.3%

CPU
CPU
2 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 1024 HK Linux

11.33 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 4096 Linux

16.45 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
50 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 4096 Linux

15.95 /mo

/mo

Alle 12 Monate abgerechnet

-8.9%

CPU
CPU
6 Xeon Cores
RAM
RAM
16 GB
Space
Space
400 GB HDD
Bandwidth
Bandwidth
Unlimited
wKVM-HDD 16384 Windows

56 /mo

/mo

Alle 12 Monate abgerechnet

-7.2%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
40 GB HDD
Bandwidth
Bandwidth
Unlimited
KVM-HDD 1024 Linux

5.92 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
6 Epyc Cores
RAM
RAM
16 GB
Space
Space
150 GB NVMe
Bandwidth
Bandwidth
Unlimited
Keitaro KVM 16384
OS
CentOS
Software
Software
Keitaro

55.54 /mo

/mo

Alle 12 Monate abgerechnet

-7.1%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB HDD
Bandwidth
Bandwidth
Unlimited
wKVM-HDD 4096 Windows

21 /mo

/mo

Alle 12 Monate abgerechnet

-8.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-wKVM-SSD 2048 Windows

37.4 /mo

/mo

Alle 12 Monate abgerechnet

-7.2%

CPU
CPU
2 Epyc Cores
RAM
RAM
1 GB
Space
Space
10 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 1024 Linux

6.89 /mo

/mo

Alle 12 Monate abgerechnet

-18.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
2 TB
wKVM-SSD 2048 Metered Windows

24 /mo

/mo

Alle 12 Monate abgerechnet

Weitere Artikel zu diesem Thema

cookie

Cookies und Datenschutz akzeptieren?

Wir verwenden Cookies, um sicherzustellen, dass wir Ihnen die beste Erfahrung auf unserer Website bieten. Wenn Sie fortfahren, ohne Ihre Einstellungen zu ändern, gehen wir davon aus, dass Sie mit dem Empfang aller Cookies auf der HostZealot-Website einverstanden sind.