PHP-FPM: PHP sajtovi
Instalacija PHP-FPM-a na VDS-u, povezivanje s Nginx-om, izbor broja procesa prema memoriji tvog tiera i rešavanje grešaka 502 i 504.
Ažurirano 23. avgust 2026.
PHP-FPM je poseban servis koji izvršava PHP kod; veb server mu samo prosleđuje zahteve. Tako rade WordPress, Laravel, Bitrix i skoro sve ostalo na PHP-u.
Instalacija
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
Na AlmaLinux i CentOS Stream koristi dnf install -y php-fpm php-mysqlnd ...; servis se zove php-fpm. Da proveriš tačnu verziju, pokreni:
php -v
systemctl list-units | grep fpm
Povezivanje sa Nginx-om
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
Otvori /info.php, proveri da PHP radi i odmah obriši taj fajl: otkriva verziju, putanje i listu modula.
Koliko procesa držati
Svaki PHP worker proces troši 40–120 MB. Dimenzioniši ga po tieru, ostavljajući memoriju za bazu i sistem. Ovo se podešava u /etc/php/8.3/fpm/pool.d/www.conf:
| Tier | Memorija | Razumno pm.max_children |
|---|---|---|
| VDS-1 | 2 GB | 5 |
| VDS-2 | 4 GB | 10 |
| VDS-3 | 8 GB | 20 |
| VDS-5 | 24 GB | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
pm.max_requests restartuje proces posle N zahteva, pa se curenja memorije u kodu ne gomilaju do kraja nedelje.
Korisne php.ini vrednosti za FPM: memory_limit = 256M, upload_max_filesize = 64M, post_max_size = 64M, opcache.enable = 1.
Posle izmena: systemctl reload php8.3-fpm.
Česte greške
| Simptom | Uzrok | Šta da radiš |
|---|---|---|
502 Bad Gateway | Pogrešna putanja do socketa ili servis ne radi | Proveri fastcgi_pass prema stvarnom fajlu u /run/php/ |
504 Gateway Time-out | Skripta se izvršava duže od tajmauta | Povećaj fastcgi_read_timeout i max_execution_time |
| Pretraživač preuzima fajl umesto da ga izvrši | Blok location ~ \.php$ se nije poklopio | Proveri redosled location blokova i pokreni nginx -t |
server reached pm.max_children u logu | Nema dovoljno procesa | Povećaj limit ako memorija dozvoljava, inače pređi na viši tier |
Logovi: /var/log/php8.3-fpm.log i /var/log/nginx/error.log.
Napravi bazu sajta pod zasebnim korisnikom sa pravima samo na sopstvenu šemu — korisnici i dozvole. Korišćenje
rootnaloga u konfiguraciji CMS-a je direktan put do gubitka svih baza odjednom.