Ответ
FastCGI (Fast Common Gateway Interface) — это бинарный протокол для эффективного взаимодействия веб-сервера (например, Nginx или Apache) с внешними прикладными процессами, обрабатывающими динамический контент (PHP, Python).
Решает проблему классического CGI: Вместо того чтобы запускать и завершать процесс интерпретатора (например, PHP) для каждого HTTP-запроса (что очень накладно), FastCGI использует долгоживущие процессы-воркеры. Веб-сервер просто передаёт запрос в свободный рабочий процесс через быстрый сокет или TCP-соединение.
PHP-FPM (FastCGI Process Manager) — это реализация FastCGI-протокола специально для PHP. Это демон, который управляет пулом (pool) PHP-процессов.
Как это работает в связке Nginx + PHP-FPM:
- Nginx получает запрос к
index.php. - Согласно конфигурации, Nginx передаёт запрос PHP-FPM (через Unix-сокет или TCP).
- PHP-FPM выбирает свободный процесс из пула, передаёт ему данные запроса и путь к скрипту.
- PHP-процесс выполняет скрипт и возвращает результат (HTML/JSON) PHP-FPM, который передаёт его обратно Nginx.
- Nginx отправляет ответ клиенту. PHP-процесс остаётся живым и готов к следующему запросу.
Пример конфигурации Nginx для передачи запросов PHP-FPM:
server {
location ~ .php$ {
# Передаём запрос бэкенду по Unix-сокету
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
# Сообщаем бэкенду, какой файл выполнять
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Подключаем стандартный набор FastCGI-параметров
include fastcgi_params;
}
}
Ключевые преимущества: высокая производительность, стабильное потребление памяти, возможность отдельного управления PHP-процессами (перезапуск, настройка пулов для разных сайтов).