+7 707 858 58 37
help@vpsadm.ru
Разница между режимами, PHP-FPM, CGI, FastCGI, модуль Apache

Часто приходится объяснять клиентам что за режимы работы PHP для сайтов.  Знаете, в настройках той же панельки ISPmanager Lite 5 имееются такие.   И еще люди говорят — вот, там же PHP 7 — а ты впариваешь свой php-fpm, который только версии 5.4 или 5.6.  И они не понимают, что режим работы гораздо важнее для производительности, чем просто версия PHP.

Я выдернул свой этот пост с форума webmasters, где когда-то давно расписывал за режимы.   Немного дополнил его скринами, о том как включить режимы в панели ISPmanager Lite 5

PHP 7  в режиме CGI

На самом деле в режиме CGI  php 7 теряет все свои преимущества, потому что CGI это в разы менее производительный режим работы PHP.  Чтобы иметь преимущества php 7 его нужно обновить общесистемный. Тогда и высокопроизводительный сервис PHP-fpm станет работать на этой же версии.  Но чего делать пока не рекомендуется, да и нету его еще в стабильных репозиториях большинства OS. Вкорячить можно, но откатить  потом будет гораздо сложней, если что-то отвалится.

Режимы работы PHP-CGI  и модуль Apache

Fastcgi в принципе то же самое что и php-fpm, но есть существенная разница. CGI — тоже оно, но не совсем. Давайте начнём с CGI и чем он отличается от обычного Apache по-умолчанию. Апач с mod_php исполняет php-код сам, отъедая при этом кучу ресурсов и делая это внутри своих процессов.

Когда используется режим CGI — это значит апач не обрабатывает php сам, а запускает php-cgi для каждого php-скрипта и забирает у него результат обработки.
Т.е по сути это даже несколько усложняет схему: пользователь шлёт запрос к nginx > тот обращается к apache > апач запускает скрипты через cgi и получает результат их выполнения > собирает из них html и отдаёт его nginx > тот собирает всю статику, нужную для этой html страницы в кучу > отдает пользователю.

Режим fastcgi

Fastcgi это тот же cgi, но отличается от него тем, что оно позволяет апачу не запускать для каждого скрипта отдельный процесс, а запустить один или несколько процессов и отдавать скрипты ему, получать от него ответ. Это немного производительнее, чем cgi, засчёт того, что операции создания процессов для ОС считаются довольно ресурсоемкими. Но в этой схеме всё тот же apache. fastcgi без апача в данном случае работать не может, это все равно модуль mod_fastcgi.

PHP-fpm  — или как он указывается в ISPmanager —  Nginx+PHP-FPM

php-fpm — это fastcgi process manager. Он представляет из себя отдельную службу, которая работает независимо от какого-либо вебсервера. Он может сам принимать запросы от вебсервера через unix-сокет или через сетевое соединение. Другими словами, вы можете держать сайты на одном сервере, а php-скрипты исполнять на другом.

И в этом случае, апач становится не нужен, потому как nginx может работать с php-fpm сам, напрямую. Апач тоже может работать в таком же режиме с php-fpm, но это не имеет смысла. php-fpm не может отдавать статические файлы или html, он может только исполнять php. получается такая схема: запрос пользователя > nginx > php-fpm >nginx, он собирает из ответа php и статики страницу > отдаёт пользователю. FPM в разы производительнее apache, в каком бы режиме тот ни был запущен.

Настройка в ISPmanager

Теперь, что касается ISP. Тот режим, о котором я говорю — nginx+php-fpm — доступен только в ISP manager 5-й версии.

Сначала нужно включить и установить нужный софт через «Возможности»

Примерно вот так выглядят настройки в этом режиме.

 

Чтобы появилась возможность изменять их у сайта, нужно сначала разрешить нужные режимы  пользователю, от имени которого работает сайт.

rezhimy-ispmanager-user

И только теперь эти режимы станут доступны для сайта этого пользователя:

 

rezhim-raboty-saita-ispmanager
Вкратце о различиях режимов работы панели также можете посмотреть в документации ISP.

При этом, сменять на ходу на этот режим через ISP следует с осторожностью, ибо можно потерять всю текущую конфигурацию сайтов на VPS — она будет заменена на новую, и если сайты с ней не заработают, и если в нее вносили раньше изменения, то переключить обратно так легко уже не получится.

В ISP 4 этого режима вообще нет, поэтому там можно настроить это только вручную, без ISP, и то, если будете после этого вносить изменения в конфиги сайтов через панель, все настройки слетят к ISP-шным, т.е на апач.

Отправить ответ

Notify of
avatar
seoonly.ru
Гость

Спасибо-) Теперь я в теме

Андрей
Гость

Есть сайты на DLE (тубы), которые почему-то работают ТОЛЬКО в режиме апач. Хоть и стоит кэширование и проч., они ложат апач — [error] server reached MaxClients setting, consider raising the MaxClients setting (c максклиентом уже игрались не помогло) и соответственно весь сервер лежит(
DLE можно подружить с другими режимами?

WebPromote.ru
Гость

Годный пост. На сервере держу пока старую сборку с апачем, а вот на локалке поставил без него. Пока еще не юзал толком. Как я понял .htaceess в этой связке не работает? ЧПУ как здесь делать или все там так же работает?

Саша
Гость

«Чтобы иметь преимущества php 7 его нужно обновить общесистемный. Тогда и высокопроизводительный сервис PHP-fpm станет работать на этой же версии. Но чего делать пока не рекомендуется, да и нету его еще в стабильных репозиториях большинства OS.»

Спасибо за эту статью и видео! Видео кстати также будет полезно тем, кто интересуется темой «как надо работать в терминале» )

Вопросики:
1. Если хочется php7, то на чистую ОС (как я понял сейчас мейнстрим CentOS для обычных сайтиков) сначала ставим из репозитариев php 5.5 (актуально на 06.2017) и потом еще ставим из не официальных репозитариев php7 ?
2. Или все-же на продакшн 5-ый ставят? )
3. Если Ставим Nginx то получается что apache можно вовсе не ставить…

P.S. Php7 сам по себе должен быть быстрее 5-го, т.к. в нем обновлен движок Zend и выброшено много устаревшего

Дмитрий
Гость

Привет, я установил nginx в возможностях, но в пункте апачи у меня стоит — Apache MPM-ITK.
Видимо поэтому у меня в настройках пользователя нет пунктов с nginx. Что делать в этой ситуации? Есть сайт вордресс работающий на апачи, что с ним будет если изменить режим? Планировал подключить второй сайт вордпресс но работающий на nginx.

Дмитрий
Гость

не прини за критику, но коменты на то и коменты что бы немного критики )
не совсем верное обьяснение, недостатков апача, в том, что он жрет память и не вместе с php, а сам по себе, причина этого в работе апача с соединениями и модулями. А в случае с php-fpm не полное описание, почему он лучше, он создан для того, что бы динамически запускать и останавливать процессы FastCGI, так как последний при отсутсвии контроля будет жрать память по хлеще апача. А еще, работа с соккетами и клиент-серверная конфигурация php-fpm когда php может выполняться вообще на другом сервере или дроплете.

Вик
Гость

«Но в этой схеме всё тот же apache. fastcgi без апача в данном случае работать не может, это все равно модуль mod_fastcgi.»

Модуль fastcgi есть для nginx. То есть, апач тоже не обязателен, как и в случае php-fpm.

Иван
Гость

Добрый день!

Спасибо за статью. Я новичок в VPS, раньше пользовался Cloudways, они за тебя всё администрируют, а теперь решил попробовать российский облачный хостинг.

С обычной установкой WordPress это решение работет на ура. А как быть с конфигурацией Nginx+PHP-FPM на мулти-сайт установке с директориями? Пока не могу найти в сети решение, которое работало бы также хорошо, как на обычной установке.

Сергей
Гость

Интересно. Спасибо за объяснения. Пытаюсь понять почему nginx делает редирект с https на https. В конфигах явного редиректа rewrite нет. Нашел информацию, что может быть настроен редирект через Strict-Transport-Security: max-age=expireTime [; includeSubdomains], но тоже не вижу нигде в конфигах. Правда есть фалйик в папке nginx fastcgi_params и в нем параметр

# PHP only, required if PHP was built with —enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

Эту установку я отключил в /etc/php/php.ini. Но что-то не помогло. На сервере стоит nginx-php-fpm.

Хомяк
Гость

Спасибо большое за простое объяснение сложно магии!

trackback

[…] добавить и менять для каждого сайта  любые версии PHP и режимы работы PHP.     А еще одна фишка, которую не умеет ни одна панель, […]

wpDiscuz