PHP-FPM: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(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 =
  
**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]].
+
'''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
+
== 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
+
== Funktionsweise ==
  
### Architektur
+
=== 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
+
=== 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
+
== 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
+
== 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:
  
```ini
+
<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 ====
  
```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 ====
  
```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
+
== 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:
  
```ini
+
<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
+
== Monitoring und Debugging ==
  
 
=== Status-Seite ===
 
=== Status-Seite ===
Zeile 129: Zeile 129:
 
* '''Access-Log''': Alle verarbeiteten Requests
 
* '''Access-Log''': Alle verarbeiteten Requests
  
## Sicherheitsaspekte
+
== Sicherheitsaspekte ==
  
 
=== Prozess-Isolation ===
 
=== Prozess-Isolation ===
Zeile 139: Zeile 139:
 
=== Konfigurationssicherheit ===
 
=== Konfigurationssicherheit ===
  
```ini
+
<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
+
== Anwendungsfälle ==
  
 
=== Shared Hosting ===
 
=== Shared Hosting ===
Zeile 166: Zeile 166:
 
* Service-spezifische Konfigurationen
 
* Service-spezifische Konfigurationen
  
## Systemanforderungen
+
== 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
+
== 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
  
## Weblinks
+
== 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

Shared Hosting

  • 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 />