Dies ist eine alte Version des Dokuments!
Apache mit mpm_prefork war bis 2005 ok, heut überholt
PHP‑FPM = PHP FastCGI Process Manager
Technisch:
Das ist ein komplett anderes Architekturmodell.
Wie funktioniert das technisch?
1️⃣ Apache empfängt eine Anfrage
Beispiel: /index.php
2️⃣ Apache erkennt: „Das ist PHP“
Durch den globalen Handler:
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
3️⃣ Apache schickt die Anfrage über einen Unix‑Socket an PHP‑FPM Der Socket ist:
/run/php/php8.2-fpm.sock
4️⃣ PHP‑FPM hat einen Pool von PHP‑Worker‑Prozessen
Beispiel:
pm.max_children = 20
Das bedeutet:
bis zu 20 PHP‑Prozesse gleichzeitig
jeder Prozess kann mehrere Anfragen nacheinander abarbeiten
5️⃣ PHP‑FPM sendet das Ergebnis zurück an Apache
Apache liefert es an den Browser aus.
Seit wann gibt es PHP‑FPM?
PHP‑FPM wurde:
2009 als Patch entwickelt
Heute nutzen alle großen Systeme PHP‑FPM:
Fazit
PHP‑FPM ist:
Und du hast jetzt endlich ein Setup, das für 2026 geeignet ist – nicht für 2005.
nano /etc/php/8.2/fpm/php.ini
error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT display_errors = Off log_errors = Off error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT display_errors = Off log_errors = Off
systemctl restart php8.2-fpm systemctl restart apache2
Nur bestimmte Domains ohne Warnungen
Falls du es nur für eine Domain abschalten willst:
In /etc/php/8.2/fpm/pool.d/www.conf:
php_admin_value[error_reporting] = 0 php_admin_value[display_errors] = Off php_admin_value[log_errors] = Off
Dann:
systemctl restart php8.2-fpm
php-fpm hat ein eigenes Error-System und gibt sie nicht unbedingt zu Apache weiter.
1. PHP‑FPM schreibt Fehler NICHT in Apache‑Logs
Das ist der wichtigste Punkt.
Du musst also FPM‑Logs aktivieren.
2. PHP‑FPM‑Log aktivieren (wichtigster Schritt)
Öffne:
nano /etc/php/8.2/fpm/php.ini
Setze:
Code
log_errors = On error_log = /var/log/php-fpm.log
Falls die Datei nicht existiert, wird sie automatisch angelegt.
Dann:
systemctl restart php8.2-fpm
Jetzt schreibt PHP alle Fehler in:
/var/log/php-fpm.log
Dort findest du den echten Fehler.
3. Pool‑Log aktivieren (noch besser)
Öffne:
nano /etc/php/8.2/fpm/pool.d/www.conf
Füge hinzu:
php_admin_value[error_log] = /var/log/php-fpm-www.log php_admin_flag[log_errors] = on
Dann:
Code
systemctl restart php8.2-fpm
Jetzt hast du pro Pool ein eigenes Log.
4. Fehler sichtbar machen (temporär) Wenn du die Seite debuggen willst, kannst du nur für diese Domain Fehler anzeigen lassen:
In www.conf:
php_admin_value[display_errors] = On php_admin_value[display_startup_errors] = On
Nach dem Debuggen wieder ausschalten.
nano /etc/php/8.2/fpm/pool.d/www.conf
nano /etc/php/8.2/fpm/pool.d/www.conf
Wenn du 16 GB RAM hast: (ich habe 32)
pm = dynamic pm.max_children = 40 pm.start_servers = 8 pm.min_spare_servers = 8 pm.max_spare_servers = 20