Uživatelské nástroje

Nástroje pro tento web


fastcgi

FastCGI

FastCGI (Fast Common Gateway Interface) je protokol a rozhraní pro komunikaci mezi webovým serverem (např. Nginx, Apache) a externími aplikacemi (např. PHP, Python, Perl). Je to vylepšená a výkonnější náhrada za původní CGI (Common Gateway Interface).

Na rozdíl od CGI, kde se pro každý požadavek spouští nový proces aplikace, FastCGI udržuje procesy v běhu, což výrazně snižuje režii a zvyšuje výkon – zejména u dynamických webových aplikací.

Proč FastCGI?

  • Výkonnost: Procesy aplikací běží trvale, nejsou spouštěny pro každý požadavek.
  • Oddělení zodpovědností: Webový server řeší statický obsah a HTTP komunikaci, aplikace řeší logiku.
  • Škálovatelnost: Aplikace mohou běžet na jiném serveru (distribuované prostředí).
  • Bezpečnost: Možnost spouštět aplikace pod různými uživateli a v izolovaných prostředích.

Jak to funguje?

1. Webový server (např. Nginx) obdrží požadavek na dynamický obsah (např. `.php` soubor). 2. Namísto spuštění skriptu přímo server předá požadavek FastCGI procesu (např. PHP-FPM). 3. FastCGI proces zpracuje požadavek a vrátí výsledek zpět webovému serveru. 4. Webový server odešle odpověď klientovi.

Komunikace probíhá buď:

  • přes Unix socket (např. `/run/php/php8.3-fpm.sock`) – rychlejší, lokální
  • nebo přes TCP socket (např. `127.0.0.1:9000`) – vhodné pro vzdálené servery

FastCGI vs CGI

Vlastnost CGI FastCGI
Procesy Nový proces pro každý požadavek Trvalé procesy (fond)
Výkon Nízký (vysoká režie) Vysoký
Použití dnes Téměř zastaralé Standard pro moderní servery
Příklad použití Staré CGI skripty PHP-FPM, uWSGI, Gunicorn

FastCGI a PHP

PHP nejčastěji běží jako FastCGI proces přes PHP-FPM (PHP FastCGI Process Manager):

  • PHP-FPM spravuje fond pracovních procesů.
  • Každý proces zpracovává požadavky přes FastCGI protokol.
  • Nginx (nebo jiný web server) komunikuje s PHP-FPM pomocí FastCGI direktiv.

Konfigurace v Nginx

Příklad předání PHP požadavku FastCGI procesu (PHP-FPM):

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
}

Důležité direktivy:

  • `fastcgi_pass` – cíl FastCGI procesu (socket nebo IP:port)
  • `fastcgi_param` – předání proměnných prostředí (např. `SCRIPT_FILENAME`)
  • `include fastcgi_params` – načtení standardních FastCGI parametrů

FastCGI parametry (důležité proměnné)

Proměnná Popis
————————–——-
`SCRIPT_FILENAME` Absolutní cesta ke skriptu na disku (nejdůležitější!)
`QUERY_STRING` Část URL za `?`
`REQUEST_METHOD` HTTP metoda (`GET`, `POST`, atd.)
`CONTENT_TYPE` MIME typ těla požadavku
`HTTP_HOST` Hodnota hlavičky `Host`
`REMOTE_ADDR` IP adresa klienta

Bez správného nastavení `SCRIPT_FILENAME` bude PHP vracet chybu nebo prázdnou odpověď.

Další FastCGI implementace

FastCGI není jen pro PHP. Používá se i pro:

  • Python: pomocí adaptéru jako `flup` nebo spuštění přes `uWSGI` v FastCGI módu
  • Perl: `FCGI` modul
  • Ruby: `fcgi` gem
  • Go: knihovny jako `net/http/fcgi`

I když v současnosti jsou populárnější jiné protokoly (např. HTTP pro mikroslužby, WSGI pro Python), FastCGI stále dominuje v PHP ekosystému.

Běžné chyby

  • 502 Bad Gateway – webový server nemůže kontaktovat FastCGI proces (není spuštěn, špatný socket).
  • File not found – chybí `SCRIPT_FILENAME` nebo je nastaven špatně.
  • Přístup zamítnut k socketu – nesoulad v uživatelích mezi webovým serverem a FastCGI procesem.

Bezpečnostní doporučení

  • Spouštěj FastCGI procesy pod neprivilegovanými uživateli.
  • Používej Unix sockety místo TCP, pokud je aplikace lokální.
  • Omez přístup k `.fcgi` nebo `.php` souborům v konfiguraci serveru.
  • Nepovoluj `PATH_INFO` v neověřených aplikacích (riziko RCE v některých frameworkách).

Viz také

Externí zdroje


*Poslední aktualizace: 2026-01-05*

fastcgi.txt · Poslední úprava: autor: admin