In modernen Webhosting-Umgebungen ist Multi-Tenant-Betrieb ein häufiges Szenario, bei dem mehrere Websites oder Anwendungen auf demselben Server gehostet werden. PHP-FPM bietet die Möglichkeit, für jeden Tenant bzw. jede Domain einen eigenen Pool zu konfigurieren. Dies ermöglicht eine strikte Isolation, verbesserte Sicherheit und gezieltes Resource Management, ohne den Overhead einzelner Serverprozesse unnötig zu erhöhen. In diesem Artikel betrachten wir, wie Multi-Pool PHP-FPM professionell eingerichtet und optimiert wird.
Warum Multi-Pool PHP-FPM?
Die klassische PHP-FPM-Konfiguration mit einem globalen Pool ist für einfache Setups ausreichend. Bei Multi-Tenant-Umgebungen treten jedoch folgende Probleme auf:
- Ein kompromittierter Tenant könnte auf Ressourcen oder Dateien anderer Pools zugreifen.
- Fehlerhafte Skripte in einem Pool können die Performance aller Websites beeinträchtigen.
- Unterschiedliche Traffic-Muster und Resource-Needs lassen sich mit einem Pool nicht effizient steuern.
Multi-Pool PHP-FPM löst diese Probleme durch Isolation auf Benutzer- und Prozess-Ebene.
Grundprinzipien der Pool-Isolation
Jeder Pool läuft unter einem eigenen Unix-Benutzer und einer eigenen Gruppe. Dies ermöglicht:
- Filesystem-Isolation via
open_basedir - Eigene Resource-Limits (Memory, max_children)
- Separate Error-Logs und Slowlogs für Debugging
- Unabhängige Restart-Strategien pro Pool
Beispiel-Architektur
- Tenant A → Pool A → Benutzer
siteA - Tenant B → Pool B → Benutzer
siteB - Webserver (Nginx/Apache) → Unix-Socket oder TCP-Socket zum jeweiligen Pool
Pool-Konfiguration Schritt für Schritt
Die Konfiguration erfolgt typischerweise in /etc/php/8.1/fpm/pool.d/ oder vergleichbaren Pfaden.
Pool für Tenant A
[siteA]
user = siteA
group = siteA
listen = /run/php/php8.1-siteA.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[open_basedir] = /var/www/siteA:/tmp
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,eval,assert
php_admin_value[memory_limit] = 128M
php_admin_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php-fpm-siteA.log
Pool für Tenant B
[siteB]
user = siteB
group = siteB
listen = /run/php/php8.1-siteB.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 15
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
php_admin_value[open_basedir] = /var/www/siteB:/tmp
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,eval,assert
php_admin_value[memory_limit] = 256M
php_admin_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php-fpm-siteB.log
Performance-Optimierung
Multi-Pool-Betrieb kann Ressourcen intensiv nutzen, wenn nicht richtig dimensioniert:
Max Children und Queueing
- Setzen Sie
pm.max_childrenbasierend auf verfügbarem RAM und durchschnittlichem Traffic. - Vermeiden Sie zu hohe Werte, um Swapping zu verhindern.
- Nutzen Sie
pm.start_servers,pm.min_spare_serversundpm.max_spare_servers, um Lastspitzen abzufedern.
Socket-Typen
- Unix-Sockets sind performanter als TCP für lokale Kommunikation.
- TCP-Sockets bieten Flexibilität für verteilte Architekturen.
Sicherheit und Isolation
Die strikte Trennung der Pools reduziert Sicherheitsrisiken erheblich.
Dateisystemzugriff
- Jeder Pool besitzt eigene
open_basedir-Pfaddefinition. - Kein Zugriff auf andere Tenants oder Systemverzeichnisse.
Funktionseinschränkungen
- Sperren Sie gefährliche PHP-Funktionen mit
disable_functions. - Verhindern Sie Remote-Code-Ausführung und Systemmanipulation.
Logging und Debugging
- Separate Error-Logs pro Pool erleichtern die Analyse.
- Slowlogs identifizieren Performance-Bottlenecks ohne globale Auswirkung.
Integration mit Webserver
Webserver müssen die richtigen Pools ansprechen. In Nginx:
server { server_name siteA.example.com; root /var/www/siteA;location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-siteA.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}}
Für Tenant B analog, einfach den Pool-Socket und das Root-Verzeichnis anpassen.
Monitoring und Wartung
- Verwenden Sie
php-fpm statusundsystemctl status php8.1-fpm@pool, um Pool-Health zu überwachen. - Setzen Sie Limits für Memory und Prozesse, um DoS-Risiken zu minimieren.
- Automatisieren Sie Reloads und Updates ohne Request-Verluste.
Fazit
Multi-Pool PHP-FPM ermöglicht sichere, performante und skalierbare Multi-Tenant-Umgebungen. Durch Benutzer-Isolation, getrennte Resource-Limits und individuelles Logging wird jeder Tenant geschützt, ohne den Betrieb anderer Websites zu gefährden. Mit sorgfältiger Konfiguration und Monitoring lassen sich Tenants effizient betreiben und gleichzeitig Sicherheitsrisiken minimieren.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

