Sobes.tech
Middle

Какво е PHP-FPM?

sobes.tech AI

Отговор от AI

PHP-FPM (FastCGI Process Manager) — това е мениджър на процеси FastCGI за PHP, алтернативен на стандартния PHP FastCGI. Той осигурява по-добра производителност при обработка на уеб заявки в среди с висока натовареност. FPM управлява пул от PHP процеси, които очакват входящи заявки от уеб сървър (например Nginx или Apache чрез модула mod_proxy_fcgi).

Ключови характеристики и предимства на FPM:

  • Пул от процеси: FPM създава и управлява набор от PHP процеси. Тези процеси могат да бъдат статични (фиксирано число), динамични (създават се при необходимост в зададени граници) или on-demand (създават се при получаване на заявка и се унищожават след обработка). Това позволява ефективно използване на системните ресурси.
  • По-добра мащабируемост: Чрез управлението на пул от процеси, FPM може да обработва множество едновременно идващи заявки, което е критично за високонагружени приложения.
  • Разделяне на процесите: Всяка заявка се обработва от отделен FPM процес, което повишава стабилността. Провал на една заявка няма да засегне другите.
  • Конфигурация: Позволява гъвкаво настройване на поведението на процесите, например, максимален брой заявки на процес, време на живот на процеса, управление на паметта.
  • Интеграция с уеб сървъри: Лесно се интегрира с популярни уеб сървъри чрез протокола FastCGI.

Пример за конфигурация на пул от процеси в php-fpm.d/www.conf:

; Име на пула
[www]

; Потребител и група, от името на които ще се стартират процесите
user = www-data
group = www-data

; Слушане на TCP сокет:
; listen = 127.0.0.1:9000
; ...или на Unix сокет:
listen = /run/php/php7.4-fpm.sock

; Метод за управление на процесите:
; static - фиксирано количество процеси (`pm.max_children`)
; dynamic - динамично количество процеси (`pm.start_servers`, `pm.min_servers`, `pm.max_servers`)
; ondemand - създава се при получаване на заявка (`pm.process_idle_timeout`, `pm.max_children`)
pm = dynamic

; Начално количество дочерни процеси при стартиране в режим dynamic
pm.start_servers = 5

; Минимално количество дочерни процеси, които винаги ще бъдат стартирани в режим dynamic
pm.min_servers = 2

; Максимално количество дочерни процеси в режим dynamic и static/ondemand
pm.max_children = 15

Без FPM уеб сървърът за всяка PHP заявка трябваше да стартира интерпретатора PHP, което е много неефективно поради разходите. FPM премахва този проблем, като поддържа готови за работа процеси.