Різниця між режимами, 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-й версії.

Спочатку потрібно включити і встановити потрібний софт через «Можливості»

Різниця між режимами, php-fpm, cgi, fastcgi, модуль apache

Приблизно ось так виглядають настройки в цьому режимі.

Щоб з'явилася можливість змінювати їх у сайту, потрібно спочатку вирішити потрібні режими користувачеві, від імені якого працює сайт.

Різниця між режимами, php-fpm, cgi, fastcgi, модуль apache

Різниця між режимами, php-fpm, cgi, fastcgi, модуль apache

Коротенько про відмінності режимів роботи панелі також можете подивитися в документації ISP.

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

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

Та ні, що не зламаєш, в принципі. Але і DLE не працюватиме нормально.

Про всяк випадок просто збережи поточний конфіг, до перемикання.

Просто ISP буває глючить, коли занадто сильно модіфіціруешь дефолтний конфіг. А у випадку з DLE його потрібно модифікувати дуже сильно, або підключати інклюд (найвірніший варіант).

А якщо не будеш руками лазити в конфіг, і впевнений, що DLE працює з дефолтних конфіг Apache - то можна і туди-назад тикати, нічого не зламаєш.

Це в ISP 4 з цим складніше було, там панель взагалі не розуміє зміни в конфігах які вручну вносили, ніякі. І зносить їх до херам якщо починаєш через панель чіпати домени.

Що стосується CGI - не зовсім так, CGI точно так же через апач працює.

Голос проти Відповісти

Поділитися через Twitter Поділитися через Вконтакте

«Щоб мати переваги php 7 його потрібно оновити загальносистемний. Тоді і високопродуктивний сервіс PHP-fpm стане працювати на цій же версії. Але чого робити поки не рекомендується, та й немає його ще в стабільних репозиторіях більшості OS. »

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

Голос проти Відповісти

2 місяців 19 годин тому

Поділитися через Twitter Поділитися через Вконтакте

Що стосується роботи без панелі - то труднощі можуть бути тільки при запуску в режимі апач-модуля.

У тому ж centos таку можливість не знаю як вкорячіть. Технічно це зрозуміло можливо, просто я поки не знаю як)

Далі за версіями OS. Це залежить виключно від зручності адміністрування, від звички роботи з ними. Для більшості завдань і сайтів мені бачиться Centos зручніше. В Debian 8 легко можна поставити обидві версії паралельно. За замовчуванням там ставиться з стабільних офіційних Ріпне 5.6 версія. Але можна встановити додатково 7ю версію і перемикатися між ними. У режимі php-fpm можна запускати сайти паралельно на різних версіях, в режимі модуля апача можна юзати або ту або іншу, легко між ними перемикатися. У режимі CGI теж можна, але його взагалі не варто юзати. Якщо тільки для налагодження.

На продакшн ставлять те, що нормально працює) Тому перед продакшном треба поганяти в тестах 🙂 Буквально минулого тижня перекладав на php 7 якраз самий що ні на є продакшн - величезну онлайн-бібліотеку з трафив 200к на добу, що працює на кластері з трьох серваков . У парі з розробником, так задовбали, кілька днів по ночах. Воно працювало на debian 7, в який взагалі немає технічної можливості поставити толком php 7 в режимі апача. Довелося апгрейдити OS до debian 8, і потім тільки ставити php 7. Переключити у нас вийшло тільки з третьої спроби, перші дві була нестабільність, гальма, глюки і відвалився функціонал. Причому, це з урахуванням того, що до цього було протестовано на PHP 7.

З приводу Nginx - так, правильно. Можна його використовувати без апача в зв'язці з php-fpm. Але зазвичай під нього треба пиляти і налагоджувати конфиг, рідко так відразу запрацює. Особливо якщо якась невідома CMS або самопис. На основі htaccess пишеться такий конфіг. Є онлайн-конвертери з .htaccess в правила nginx, але вони в чистому рідко видають то що треба. Зазвичай їх просто як підсобний інструмент можна використовувати, брати якісь шматки, з них вже ліпити і налагоджувати свій конфіг.

Голос проти Відповісти

2 місяців 18 годин тому