Ответ 1
PHP-FPM намного лучше, чем старая FastCGI-обработка PHP. Начиная с PHP 5.3.3 PHP-FPM находится в ядре, а старая реализация FastCGI больше не доступна.
Мой ответ был просто проголосован (после того, как он был в сети в течение довольно долгого времени), и я понимаю, почему, так вот список, почему PHP-FPM на самом деле лучше, чем старая реализация FastCGI.
Прежде всего, довольно давно было известно, что реализация FastCGI плоха в сообществе PHP. Страница, на которой есть документы, которые можно найти в https://wiki.php.net/ideas/fastcgiwork, где говорится:
php-cgi не полезен в производственной среде без дополнительных "костылей" (например, spawn-fcgi из lighttpd distribution или php-fpm patch). Этот проект предполагает интеграцию таких "костылей" и расширение php-cgi для поддержки разных протоколов.
- daemonization (отключение, создание файла pid, переменные среды установки, setuid/setgid/chroot)
- изящный перезапуск
- разделить и улучшить транспортный уровень, чтобы поддерживать различные протоколы.
- поддержка протокола SCGI
- поддержка подмножества протокола HTTP
- ...
Вот список того, что PHP-FPM делает лучше, чем в http://php-fpm.org/about/:
- Демонстрация PHP: файл pid, файл журнала,
setsid()
,setuid()
,setgid()
,chroot()
- Управление процессами. Возможность "изящно" останавливать и запускать PHP-работников без потери запросов. Это позволяет постепенно обновлять конфигурацию и бинарные файлы без потери запросов.
- Ограничение IP-адресов, из которых могут поступать запросы.
- Динамическое число процессов в зависимости от нагрузки (адаптивный процесс нерест).
- Запуск рабочих с разными настройками uid/gid/chroot/environment и различными параметрами
php.ini
(нет необходимости в безопасном режиме).- Запись
STDOUT
иSTDERR
.- Возможность экстренного перезапуска всех процессов в случае случайного уничтожения кеша кода операции общей памяти при использовании ускорителя.
- Задание завершения процесса, если
set_time_limit()
не работает.Дополнительные возможности: - Заголовок ошибки - Ускоренная поддержка загрузки -
fastcgi_finish_request()
- Медленный ход с backtrace