PHP-FPM: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „# PHP-FPM **PHP-FPM** ('''F'''astCGI '''P'''rocess '''M'''anager) ist eine alternative PHP-Implementierung, die als eigenständiger FastCGI-Server fun…“) |
|||
| Zeile 1: | Zeile 1: | ||
| − | + | = PHP-FPM = | |
| − | + | '''PHP-FPM''' ('''F'''astCGI '''P'''rocess '''M'''anager) ist eine alternative [[PHP]]-Implementierung, die als eigenständiger [[FastCGI]]-Server fungiert. Es wurde entwickelt, um die Performance und Skalierbarkeit von PHP-Anwendungen zu verbessern, insbesondere bei [[Webserver]]n wie [[nginx]] oder [[Apache HTTP Server|Apache]]. | |
| − | + | == Geschichte == | |
PHP-FPM wurde ursprünglich 2004 von Andrei Nigmatulin als Patch für PHP entwickelt. Nach Jahren der separaten Entwicklung wurde es 2009 in den PHP-Core integriert und ist seit [[PHP]] 5.3.3 (2010) Teil der offiziellen PHP-Distribution. | PHP-FPM wurde ursprünglich 2004 von Andrei Nigmatulin als Patch für PHP entwickelt. Nach Jahren der separaten Entwicklung wurde es 2009 in den PHP-Core integriert und ist seit [[PHP]] 5.3.3 (2010) Teil der offiziellen PHP-Distribution. | ||
| − | + | == Funktionsweise == | |
| − | + | === Architektur === | |
PHP-FPM verwendet eine '''Master-Worker-Architektur''': | PHP-FPM verwendet eine '''Master-Worker-Architektur''': | ||
| Zeile 17: | Zeile 17: | ||
* Kommunikation erfolgt über das [[FastCGI]]-Protokoll | * Kommunikation erfolgt über das [[FastCGI]]-Protokoll | ||
| − | + | <pre> | |
Webserver (nginx/Apache) | Webserver (nginx/Apache) | ||
↓ FastCGI | ↓ FastCGI | ||
| Zeile 24: | Zeile 24: | ||
├── Worker Pool 2 | ├── Worker Pool 2 | ||
└── Worker Pool N | └── Worker Pool N | ||
| − | + | </pre> | |
| − | + | === Prozess-Management === | |
PHP-FPM bietet drei verschiedene Prozess-Management-Modi: | PHP-FPM bietet drei verschiedene Prozess-Management-Modi: | ||
| Zeile 34: | Zeile 34: | ||
; '''ondemand''' : Prozesse werden nur bei Bedarf gestartet | ; '''ondemand''' : Prozesse werden nur bei Bedarf gestartet | ||
| − | + | == Vorteile gegenüber traditionellen Ansätzen == | |
=== Gegenüber Apache mod_php === | === Gegenüber Apache mod_php === | ||
| Zeile 49: | Zeile 49: | ||
* '''Speicher-Effizienz''': Shared Memory für häufig verwendete Daten | * '''Speicher-Effizienz''': Shared Memory für häufig verwendete Daten | ||
| − | + | == Konfiguration == | |
=== Pool-Konfiguration === | === Pool-Konfiguration === | ||
| Zeile 55: | Zeile 55: | ||
Jeder Worker-Pool wird durch eine separate Konfigurationsdatei definiert: | Jeder Worker-Pool wird durch eine separate Konfigurationsdatei definiert: | ||
| − | + | <syntaxhighlight lang="ini"> | |
[pool-name] | [pool-name] | ||
user = www-data | user = www-data | ||
| Zeile 70: | Zeile 70: | ||
pm.min_spare_servers = 5 | pm.min_spare_servers = 5 | ||
pm.max_spare_servers = 35 | pm.max_spare_servers = 35 | ||
| − | + | </syntaxhighlight> | |
=== Webserver-Integration === | === Webserver-Integration === | ||
| Zeile 76: | Zeile 76: | ||
==== nginx ==== | ==== nginx ==== | ||
| − | + | <syntaxhighlight lang="nginx"> | |
location ~ \.php$ { | location ~ \.php$ { | ||
fastcgi_pass unix:/run/php/php-fpm.sock; | fastcgi_pass unix:/run/php/php-fpm.sock; | ||
| Zeile 82: | Zeile 82: | ||
include fastcgi_params; | include fastcgi_params; | ||
} | } | ||
| − | + | </syntaxhighlight> | |
==== Apache ==== | ==== Apache ==== | ||
| − | + | <syntaxhighlight lang="apache"> | |
<FilesMatch \.php$> | <FilesMatch \.php$> | ||
SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost/" | SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost/" | ||
</FilesMatch> | </FilesMatch> | ||
| − | + | </syntaxhighlight> | |
| − | + | == Performance-Optimierung == | |
=== Speicher-Management === | === Speicher-Management === | ||
| Zeile 98: | Zeile 98: | ||
Die optimale Anzahl von Worker-Prozessen berechnet sich aus: | Die optimale Anzahl von Worker-Prozessen berechnet sich aus: | ||
| − | + | <pre> | |
Max Children = Verfügbarer RAM / Durchschnittlicher Prozess-Speicher | Max Children = Verfügbarer RAM / Durchschnittlicher Prozess-Speicher | ||
| − | + | </pre> | |
=== OPcache-Integration === | === OPcache-Integration === | ||
| Zeile 106: | Zeile 106: | ||
PHP-FPM arbeitet optimal mit [[OPcache]] zusammen: | PHP-FPM arbeitet optimal mit [[OPcache]] zusammen: | ||
| − | + | <syntaxhighlight lang="ini"> | |
opcache.enable = 1 | opcache.enable = 1 | ||
opcache.memory_consumption = 128 | opcache.memory_consumption = 128 | ||
opcache.max_accelerated_files = 4000 | opcache.max_accelerated_files = 4000 | ||
| − | + | </syntaxhighlight> | |
| − | + | == Monitoring und Debugging == | |
=== Status-Seite === | === Status-Seite === | ||
| Zeile 129: | Zeile 129: | ||
* '''Access-Log''': Alle verarbeiteten Requests | * '''Access-Log''': Alle verarbeiteten Requests | ||
| − | + | == Sicherheitsaspekte == | |
=== Prozess-Isolation === | === Prozess-Isolation === | ||
| Zeile 139: | Zeile 139: | ||
=== Konfigurationssicherheit === | === Konfigurationssicherheit === | ||
| − | + | <syntaxhighlight lang="ini"> | |
; Sicherheitsbeschränkungen | ; Sicherheitsbeschränkungen | ||
php_admin_flag[allow_url_fopen] = off | php_admin_flag[allow_url_fopen] = off | ||
php_admin_value[disable_functions] = exec,shell_exec,system | php_admin_value[disable_functions] = exec,shell_exec,system | ||
php_admin_value[open_basedir] = /var/www/website | php_admin_value[open_basedir] = /var/www/website | ||
| − | + | </syntaxhighlight> | |
| − | + | == Anwendungsfälle == | |
=== Shared Hosting === | === Shared Hosting === | ||
| Zeile 166: | Zeile 166: | ||
* Service-spezifische Konfigurationen | * Service-spezifische Konfigurationen | ||
| − | + | == Systemanforderungen == | |
* '''Betriebssystem''': Linux, Unix-ähnliche Systeme | * '''Betriebssystem''': Linux, Unix-ähnliche Systeme | ||
| Zeile 173: | Zeile 173: | ||
* '''Speicher''': Mindestens 512 MB RAM (abhängig von der Anwendung) | * '''Speicher''': Mindestens 512 MB RAM (abhängig von der Anwendung) | ||
| − | + | == Alternativen == | |
* '''Apache mod_php''': Eingebettete PHP-Ausführung | * '''Apache mod_php''': Eingebettete PHP-Ausführung | ||
| Zeile 181: | Zeile 181: | ||
* '''Swoole''': Asynchroner PHP-Server | * '''Swoole''': Asynchroner PHP-Server | ||
| − | + | == Siehe auch == | |
| + | |||
| + | * [[FastCGI]] | ||
| + | * [[nginx]] | ||
| + | * [[Apache HTTP Server]] | ||
| + | * [[PHP]] | ||
| + | * [[Webserver]] | ||
| + | |||
| + | == Weblinks == | ||
* [https://www.php.net/manual/en/install.fpm.php Offizielle PHP-FPM Dokumentation] | * [https://www.php.net/manual/en/install.fpm.php Offizielle PHP-FPM Dokumentation] | ||
Aktuelle Version vom 26. August 2025, 05:44 Uhr
PHP-FPM
PHP-FPM (FastCGI Process Manager) ist eine alternative PHP-Implementierung, die als eigenständiger FastCGI-Server fungiert. Es wurde entwickelt, um die Performance und Skalierbarkeit von PHP-Anwendungen zu verbessern, insbesondere bei Webservern wie nginx oder Apache.
Geschichte
PHP-FPM wurde ursprünglich 2004 von Andrei Nigmatulin als Patch für PHP entwickelt. Nach Jahren der separaten Entwicklung wurde es 2009 in den PHP-Core integriert und ist seit PHP 5.3.3 (2010) Teil der offiziellen PHP-Distribution.
Funktionsweise
Architektur
PHP-FPM verwendet eine Master-Worker-Architektur:
- Ein Master-Prozess verwaltet mehrere Worker-Pools
- Worker-Prozesse führen die eigentlichen PHP-Scripts aus
- Kommunikation erfolgt über das FastCGI-Protokoll
Webserver (nginx/Apache)
↓ FastCGI
PHP-FPM Master Process
├── Worker Pool 1
├── Worker Pool 2
└── Worker Pool N
Prozess-Management
PHP-FPM bietet drei verschiedene Prozess-Management-Modi:
- static
- Feste Anzahl von Worker-Prozessen
- dynamic
- Variable Anzahl basierend auf aktueller Last
- ondemand
- Prozesse werden nur bei Bedarf gestartet
Vorteile gegenüber traditionellen Ansätzen
Gegenüber Apache mod_php
- Bessere Ressourcen-Kontrolle: Separate Prozesse ermöglichen präzise Speicher- und CPU-Verwaltung
- Sicherheit: Verschiedene Anwendungen können mit unterschiedlichen Benutzern laufen
- Stabilität: Ein Absturz eines PHP-Prozesses betrifft nicht den Webserver
- Skalierbarkeit: Unabhängige Skalierung von Webserver und PHP-Backend
Gegenüber CGI
- Performance: Wiederverwendung von Prozessen reduziert Overhead
- Persistente Verbindungen: Datenbankverbindungen und andere Ressourcen bleiben erhalten
- Speicher-Effizienz: Shared Memory für häufig verwendete Daten
Konfiguration
Pool-Konfiguration
Jeder Worker-Pool wird durch eine separate Konfigurationsdatei definiert:
[pool-name]
user = www-data
group = www-data
; Socket-Konfiguration
listen = /run/php/php-fpm.sock
; oder TCP: listen = 127.0.0.1:9000
; Prozess-Management
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
Webserver-Integration
nginx
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Apache
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
Performance-Optimierung
Speicher-Management
Die optimale Anzahl von Worker-Prozessen berechnet sich aus:
Max Children = Verfügbarer RAM / Durchschnittlicher Prozess-Speicher
OPcache-Integration
PHP-FPM arbeitet optimal mit OPcache zusammen:
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
Monitoring und Debugging
Status-Seite
PHP-FPM bietet eine integrierte Status-Seite mit wichtigen Metriken:
- Aktive/Idle Prozesse
- Request-Statistiken
- Speicherverbrauch
- Slow-Request-Logging
Log-Dateien
- Error-Log: Fehler und Warnungen
- Slow-Log: Langsame Requests
- Access-Log: Alle verarbeiteten Requests
Sicherheitsaspekte
Prozess-Isolation
- Verschiedene Pools können mit unterschiedlichen Benutzern laufen
- chroot-Umgebungen für zusätzliche Isolation
- Resource-Limits pro Pool
Konfigurationssicherheit
; Sicherheitsbeschränkungen
php_admin_flag[allow_url_fopen] = off
php_admin_value[disable_functions] = exec,shell_exec,system
php_admin_value[open_basedir] = /var/www/website
Anwendungsfälle
- Verschiedene Kunden mit eigenen PHP-Pools
- Individuelle PHP-Konfigurationen
- Bessere Ressourcen-Isolation
High-Performance Websites
- Optimierte Ressourcen-Nutzung
- Horizontale Skalierung
- Load Balancing zwischen mehreren Servern
Microservices-Architektur
- Separate PHP-FPM Instanzen für verschiedene Services
- Unabhängige Skalierung und Updates
- Service-spezifische Konfigurationen
Systemanforderungen
- Betriebssystem: Linux, Unix-ähnliche Systeme
- PHP-Version: 5.3.3 oder höher
- Webserver: nginx, Apache (mit mod_proxy_fcgi), lighttpd
- Speicher: Mindestens 512 MB RAM (abhängig von der Anwendung)
Alternativen
- Apache mod_php: Eingebettete PHP-Ausführung
- PHP-CGI: Traditioneller CGI-Ansatz
- HHVM: Facebook's HipHop Virtual Machine
- ReactPHP: Event-driven PHP-Server
- Swoole: Asynchroner PHP-Server
Siehe auch
Weblinks
Einzelnachweise
<references />