Dies ist eine alte Version des Dokuments!


PHP-FPM

Apache mit mpm_prefork war bis 2005 ok, heut überholt

PHP‑FPM = PHP FastCGI Process Manager

Technisch:

  • Ein eigener Dienst, der PHP‑Skripte ausführt
  • Apache kommuniziert über FastCGI mit PHP‑FPM
  • Apache muss PHP nicht mehr selbst laden
  • PHP‑FPM verwaltet seine eigenen Worker‑Prozesse

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

  • 2012 offiziell in PHP 5.4 integriert
  • Seit PHP 7 ist es der Standard
  • Seit PHP 8 ist mod_php praktisch tot

Heute nutzen alle großen Systeme PHP‑FPM:

  • WordPress
  • Joomla
  • Shopware
  • Magento
  • Symfony
  • Laravel

Fazit

PHP‑FPM ist:

  • schneller
  • stabiler
  • sicherer
  • moderner
  • flexibler
  • skalierbarer

Und du hast jetzt endlich ein Setup, das für 2026 geeignet ist – nicht für 2005.

PHP‑Warnings global abschalten

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

Log Errors

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.

  • mod_php → Fehler im Apache‑Log
  • PHP‑FPM → Fehler im FPM‑Log

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.

 
Nach oben
apache/php-fpm.1783080324.txt.gz · Zuletzt geändert: von gerald
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0
DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp   Dogecoin Donations Accepted Here    DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp  DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp