Uživatelské nástroje

Nástroje pro tento web


php-fpm

PHP-FPM

PHP-FPM (FastCGI Process Manager) je alternativní implementace FastCGI rozhraní pro PHP, určená pro vysoce vytížené weby. Poskytuje lepší výkon, flexibilitu a správu procesů než tradiční mod_php (používaný s Apache) nebo základní FastCGI.

Je široce používán spolu s webovými servery jako Nginx, který sám o sobě neprocesuje PHP skripty, ale předává je externímu procesu – právě PHP-FPM.

Proč používat PHP-FPM?

  • Vysoký výkon a škálovatelnost – efektivně spravuje fondy pracovních procesů.
  • Izolace mezi virtuálními hosty – lze spouštět různé pooly pod různými uživateli a s různými nastaveními.
  • Pokročilé možnosti konfigurace – ladění počtu procesů, časových limitů, restartů apod.
  • Podpora událostního zpracování (event-driven) – ideální pro spolupráci s Nginx.

Instalace

Na většině Linuxových distribucí je PHP-FPM součástí balíčkovacího systému.

# Ubuntu/Debian (pro PHP 8.3 – verze se může lišit)
sudo apt install php8.3-fpm
 
# CentOS/RHEL/Fedora (s EPEL nebo Remi repozitářem)
sudo dnf install php-fpm

Po instalaci je služba php8.3-fpm (nebo php-fpm) k dispozici a lze ji spravovat standardním způsobem:

sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm

Základní konfigurace

Hlavní konfigurační soubory se nacházejí v:

  • Hlavní konfigurace: `/etc/php/8.3/fpm/php-fpm.conf` (cesta se liší dle verze a distribuce)
  • Pool konfigurace: `/etc/php/8.3/fpm/pool.d/`

Každý „pool“ (fond) představuje skupinu PHP procesů, které mohou běžet pod určitým uživatelem, poslouchat na určitém socketu nebo portu a mít vlastní limity.

Příklad konfigurace poolu

Soubor: `/etc/php/8.3/fpm/pool.d/www.conf` (výchozí pool)

[www]
user = www-data
group = www-data

; Poslouchá buď přes Unix socket (doporučeno) nebo TCP port
listen = /run/php/php8.3-fpm.sock
; listen = 127.0.0.1:9000

; Oprávnění pro socket (důležité pro Nginx)
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

; Typ správy procesů: static, dynamic, ondemand
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500

; Logování
slowlog = /var/log/php8.3-fpm-slow.log
request_slowlog_timeout = 5s

Integrace s Nginx

Nginx potřebuje předávat PHP požadavky do PHP-FPM. To se děje pomocí bloku location ~ \.php$.

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;
    index index.php index.html;
 
    location / {
        try_files $url $url/ =404;
    }
 
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        # nebo: fastcgi_pass 127.0.0.1:9000;
    }
}
Důležité: Ujisti se, že uživatel, pod kterým běží Nginx (např. `www-data` nebo `nginx`), má přístup k PHP-FPM socketu.

Správa poolů pro více webů

PHP-FPM umožňuje vytvořit samostatný pool pro každý web, což zvyšuje bezpečnost a izolaci.

Příklad: `/etc/php/8.3/fpm/pool.d/site1.conf`

[site1]
user = site1
group = site1
listen = /run/php/site1.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
 
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
 
php_admin_value[upload_max_filesize] = 10M
php_admin_value[post_max_size] = 12M

Tímto způsobem můžeš mít různá nastavení `php.ini` pro různé domény – včetně omezení paměti, časových limitů nebo zakázání funkcí.

Běžné problémy a řešení

Problém Možné řešení
502 Bad Gateway Zkontroluj, že PHP-FPM běží a Nginx má přístup k socketu.
Permission denied na socket Ověř `listen.owner`/`listen.group` v poolu; ujisti se, že odpovídají uživateli Nginx.
PHP skripty se nestahují Chybí blok `location ~ \.php$` nebo špatně nastaven `fastcgi_pass`.
Pomalé skripty Zkontroluj `request_slowlog_timeout` a nastav slowlog pro ladění.

Užitečné příkazy

sudo systemctl reload php8.3-fpm     # Načte novou konfiguraci
sudo nginx -t && sudo systemctl reload nginx  # Otestuje a načte Nginx
sudo systemctl status php8.3-fpm     # Stav služby
sudo tail -f /var/log/php8.3-fpm.log # Hlavní log

Výhody oproti mod_php

  • Nižší paměťová náročnost – procesy lze dynamicky přidávat/odebírat.
  • Lepší izolace – každý web může běžet pod jiným uživatelem.
  • Vhodné pro Nginx – který nemá modul pro vnitřní spouštění PHP.
  • Pokročilé logování – např. pomalé požadavky.

Externí zdroje

Viz také


*Poslední aktualizace: 2026-01-05*

php-fpm.txt · Poslední úprava: autor: admin