FastCGI

FastCGI — это протокол, который связывает веб-сервер (Nginx, Apache) с приложением или интерпретатором языка (PHP, Python, Perl).

Что даёт

Древний протокол CGI на каждый клик пользователя поднимал в операционке новый процесс приложения с нуля, читал ответ и тут же убивал его. На пару визитов в день этого хватало, но под нагрузкой сервер моментально умирал из-за бесконечного создания процессов и жутких расходов CPU.

FastCGI решает эту проблему банально: он держит процессы приложения постоянно запущенными в памяти (persistent processes). Веб-сервер принимают входящий HTTP-запрос, переводит его в бинарный формат FastCGI и отдаёт по сокету (TCP или UNIX) уже готовому процессу-воркеру. Процесс выполняет код, возвращает результат и не завершается, а встаёт в ожидание следующего клиента.

Плюсы протокола:

  • Минимальный оверхед. Нет затрат времени и ресурсов на инициализацию окружения, подгрузку библиотек и парсинг конфигов при каждом запросе.
  • Гибкая масштабируемость. Приложение можно вынести на отдельный физический сервер или размазать по пулу машин, общаясь с веб-сервером по сети через TCP-сокет.
  • Изоляция и стабильность. Если скрипт падает с паникой или фатальной ошибкой, погибает только один рабочий процесс. Менеджер процессов тут же поднимет ему замену, а сам веб-сервер продолжит раздавать статику.

Как использовать

В современном бэкенде с FastCGI напрямую почти не работают — протокол спрятан под капотом менеджеров процессов. Самый частый пример — связка Nginx и PHP-FPM (FastCGI Process Manager).

  1. Выбор типа сокета. Для общения веб-сервера и PHP на одной машине используют UNIX-сокет (unix:/run/php/php8.2-fpm.sock). Он работает быстрее, так как данные идут через память ядра без накладных расходов сетевого стека TCP/IP. Если бэкенд вынесен на отдельную ноду, выбирают TCP-сокет (127.0.0.1:9000).
  2. Проксирование в веб-сервере. В конфиге Nginx задают директиву fastcgi_pass, передают заголовки через include fastcgi_params; и явно указывают путь к исполняемому файлу через fastcgi_param SCRIPT_FILENAME.
  3. Тюнинг пула воркеров. Настройки пула (pm.max_children, pm.start_servers) подбирают исходя из доступной RAM. Если процессов слишком много, сервер уйдет в swap, если мало — запросы встанут в очередь (fastcgi_read_timeout).
  • Хостинг для сайта

    Хостинг для сайта

    Мощный и надежный виртуальный хостинг для сайта с поддержкой 24/7
    Подробнее
  • Почта на домене

    Почта на домене

    Позволяет создавать и использовать адреса электронной почты, привязанные к вашему доменному имени, улучшая профессиональный имидж.
    Подробнее
  • Конструктор сайтов

    Конструктор сайтов

    Генерация сайта за считанные минуты
    Подробнее