Что такое FastCGI и как он связан с PHP-FPM?

«Что такое FastCGI и как он связан с PHP-FPM?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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:

  1. Nginx получает запрос к index.php.
  2. Согласно конфигурации, Nginx передаёт запрос PHP-FPM (через Unix-сокет или TCP).
  3. PHP-FPM выбирает свободный процесс из пула, передаёт ему данные запроса и путь к скрипту.
  4. PHP-процесс выполняет скрипт и возвращает результат (HTML/JSON) PHP-FPM, который передаёт его обратно Nginx.
  5. 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-процессами (перезапуск, настройка пулов для разных сайтов).