Single Blog

Установка nginx + php-fpm ч1. Немного теории

01.11.2016, Автор: 0 комментаиев

Данная статья основанная на классическом жизненном примере: ваш сайт стал популярен (будь то магазин,блог,форум и тд) и имеет огромное количество подключений и старичек apache, как бы он хорош не был, уже не справляется с ними. А ваш сайт скорее всего находился на виртуальном хостинге, и хостер в силу этих причин (чрезмерного потребления ресурсов) просит вас «переехать» на индивидуальную машину.

Вы заказываете ВДС сервер и здесь стоит выбор конфигурации.

Хорошей альтернативой станет связка из nginx+php-fpm. Далее мы постараемся разобраться почему…

Сразу охладим пыл: nginx не быстрее apache и не есть панацея от всех болезней. Относительно производительности PHP  apache+mod_php будет на 10-15% быстрее, чем FastCGI. Так что если вы упираете именно в параметр производительности PHP то данная модель Вам точно не поможет

Немного теории

Nginx

Работа над ним началась в далеком по сегодняшним меркам 2002м году русским разработчиком Игорем Сысоевым. Задачей было разработать вед сервер способный держать >10k соединений одновременно. Релиз был выпущен в 2004м году и сразу обрел огромную популярность благодаря своей легковесности и возможности легко масштабироваться на минимальном железе.

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

Детально мы останавливаться не будем, тк в сети относительно него информации вдоволь.

PHP-FPM

Здесь навереное кратко не получится, так что все по порядку.

CGI

Common Gateway Interface, «общий интерфейс шлюза» — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как скрипты должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.

То есть это по большей части набор соглашений, которые должны соблюдать Web-серверы при выполнении Web-приложений.

Важно заметить: CGI — это не программа, не язык программирования.

FastCGI

Следующая эволюционная ступень CGI

Более производительный, безопасный, менее ограниченный.

Основной принцип работы FastCGI программ: скрипт (сценарий) единоразово загружается в память в качестве демона ( программы запускаемой самой системой и работающей в фоновом режиме) и далее учавствует в цикле обработке HTTP-запросов. Один и тот же процесс-сценарий обрабатывает множество запросов один за другим. Это отличает его от режима работы CGI, когда каждый запрос создает процесс, тот отрабатывает и «умирает» (в идеале конечно).

Снова таки, FastCGI не программа и не язык. Это просто спецификация программ.

PHP как CGI

Старый способ исполнения скриптов php на веб-сервере. Для Apache нужен mod_cgi

Nginx по-умолчанию не имеет его поддержки

Сейчас используется не так часто в силу свой малой производительности.

PHP-FPM

FPM (Менеджер процессов FastCGI) является альтернативной реализацией PHP FastCGI с несколькими дополнительными возможностями обычно используемыми для высоконагруженных сайтов.

Эти возможности включают в себя:

  • продвинутое управление процессами с корректной (graceful) процедурой остановки и запуска;

  • возможность запуска воркеров с различными uid/gid/chroot-окружением, а также запуска на различных портах с использованием разных php.ini (замещение safe_mode);

  • логирование стандартных потоков вывода (stdout) и ошибок (stderr);

  • аварийный перезапуск в случае внезапного разрушения opcode-кэша;

  • поддержка ускоренной загрузки (accelerated upload);

  • «slowlog» — логирование необычно медленно выполняющихся скриптов (не только их имена, но также и их трассировки. Это достигается с помощью ptrace и других подобных утилит для чтения данных исполнения удаленных процессов);

  • fastcgi_finish_request() — специальная функция для завершения запроса и сброса всех буферов данных, причем процесс может продолжать выполнение каких-либо длительных действий (конвертирование видео, обработка статистики и т.п.);

  • Динамическое/статическое порождение дочерних процессов;

  • Базовая информация о статусе SAPI (аналогично Apache mod_status);

  • Конфигурационный файл, основанный на php.ini.

Artem Porubay