Сучасне програмування – це розподілена обробка зростаючих обсягів інформації. Локальні інструменти в далекому минулому. Актуальні веб-сервери, розподілені колективи розробників і споживачів. Завдання та області застосування перетворилися в потоки запитів, на які потрібні миттєві відповіді.
Php – популярна мова програмування, але він «тече» за власною ініціативою і забезпечує благодатний грунт для кваліфікованих розробників створювати тонни неефективного коду. Програміст-початківець перспективніше аса комп’ютерних технологій на тій простій підставі, що відноситься до роботи акуратно, уважно і старанно вирішує поставлену задачу мінімальним об’ємом коду.
Причини появи і ідея fpm
Не потрібно «бахать» тонни коду від іменитих попередників у вирішення задачі, достатньо написати красивий і добре коментований код. Але саме великому кодом, популярних веб-ресурсів, технологічних недоліків Php і зростання навантаження (відвідувачів) на веб-ресурси зобов’язані своїм народженням численні варіанти прискорення обробки запитів на веб-сервери.
Звичайний сервер бере все навантаження на себе, розписує її по процесам і хитромудрим логікам. Його потужність обмежена, і він змушений ставити нові запити в чергу, поки не впорається з тими, що вже в роботі.
Різні варіанти SAPI (Server API) в тій чи іншій мірі вирішували завдання швидкої обробки потоку запиту, але обмеження залишалися. Поява Nginx представило веб-ресурс як сукупність статики і динаміки, перевело роботу по обслуговуванню хостингу в сферу подій і управління навантаженням.
На веб-сторінці не так багато Php, але завжди багато тексту, зображень та інших елементів, які можна сміливо відправляти в браузер відвідувача відразу, без обробки яким-небудь процесом сервера. Тільки коли на сторінці є Php-код, слід застосувати Php або Php-fpm.
По суті, мова йде про швидкий менеджер процесів (FastCGI Process Manager). І його можна запускати безліч разів, але тільки за обґрунтованої необхідності. На кожен запит буде власний процес. Наступний запит – наступний процес. Це суттєво змінює стан речей, і сторінка сайту в повному обсязі швидше опиниться в браузері відвідувача.
Не можна сказати, що ідея Nginx і Php-fpm – ліки від усіх проблем, але у багатьох випадках – це відмінне рішення для створення продуктивного веб-сервера. Можна піти ще далі, поєднавши досвід і мудрість Apache з молодістю і амбітністю Nginx. В такому випадку, громіздкі процеси можна відправити до Apache, а легкі сторінки – Php-fpm.
Оцінка ситуації та підготовка
Все сімейство линуксоидов відрізняє простота і зручність. Насправді, для адміністрування цих систем потрібні знання та вміння. Система UBUNTU під Php-fpm і Nginx – хороший вибір. Для корпоративно-орієнтованої CentOS потрібно більше знань.
Інші лінукси менш популярні, хоча в кожному конкретному випадку слід уважно оцінити всі обставини і прийняти зважене рішення.
Наприклад, вітчизняний RUNTU, про який мало хто знає, може швидко врятувати ситуацію, коли потрібно встановити систему у віртуальному контейнері з обмеженим простором усередині локальної мережі і при інших незручності.
Мало поставити Php-fpm, його треба ще й перевірити перед «виходом у світ». RUNTU – ідеальний тестер, коли у зовнішній світ дивиться тільки ваш комп’ютер (його віртуальний контейнер). В локальній мережі завжди можна швидко налагодити мирний контакт. Можна буде перевірити не тільки Php-fpm: настройка і перевірка декількох віртуальних хостів Nginx також буде доступна.
Завжди краще починати з установки системи. У випадках, коли система вже варто і потрібно поставити тільки Php-fpm, можуть виникнути непередбачені проблеми. Наприклад, в CentOS 6 і обмеження Php 5. В CentOS 7 і Apache + Php 7.
Мода на віртуальні машини – теж обмеження. Свіжоспечена і перспективна «Космічна Каракатиця» (Ubuntu 18.10 Cosmic Cuttlefish) може запросто стати в віртуальний контейнер, але працювати принципово не буде. Виглядає як декларація: моя середовище – космічний простір, а не якийсь там контейнер.
Линуксоид – це не Windows, але характер проявити може і робить це при всякому зручному випадку. Тільки знання та вміння допомагають впоратися з поставленим завданням у будь-якій операційній середовищі.
Установка UBUNTU
Поставити UBUNTU 18.04 в серверному виконанні – просте і практичне рішення.
Швидко, просто і практично. Добру основу, до якого адекватно ставиться будь лінукс – це практика. Навіть якщо потрібно поставити php-fpm на CentOS 6, не завадить пройти перевірку на надійною і простою системою. Легше буде розуміти, де і що шукати в тій системі, на яку орієнтована завдання.
Установка Nginx
Достатньо однієї команди і кількох хвилин. Сучасний і швидкий веб-сервер став на машину або в контейнер. Потрібно тільки відкрити порти в брандмауера і можна буде йти далі.
Основна конфігурація Nginx знаходиться за адресою:
- /etc/nginx
і слід завжди пам’ятати про трьох командах:
- systemctl status nginx;
- systemctl stop nginx;
- systemctl start nginx.
Їх слід використовувати при всякій зміні конфігурації сервера. Не слід також забувати, що зміна конфігурації, реєстрація віртуальних хостів пов’язана з IP адресами та іменами хостів, які також повинні бути враховані у файлі hosts, який знаходиться за адресою:
- /etc.
Не принципово коли ставити Php-fpm, Php, MySQL, Apache і Nginx, але розумніше починати з останніх двох позицій, а потім переходити до інших.
Установка швидкого менеджера
Встановлення Php-fpm являє собою одну команду і дві дії.
Виконується інсталяція, прибирається крапка з комою (символ коментаря) у файлі php.ini і проводиться перезапуск менеджера.
Важливо звернути увагу: посилання на швидкий менеджер – це файл конфігурації сайту. В даному випадку, на сервері є тільки вихідний сайт і його конфігурація у файлі default.
Для кожного віртуального хоста, потрібно буде у файлі конфігурації в блоці server зробити відповідні зміни.
На малюнку виділено три блоки location: перший там вже був, два наступних додані. Перший стосується всього, другий тільки Php-файлів, третій робить заборона на файли .ht* – маються на увазі файли конфігурації Apache.
Тестування виконаної роботи
У кореневій папці сайту слід створити файл index.php і виконати тестування конфігурації Nginx. Проблем не буде, якщо все зроблено акуратно і правильно.
Потім можна перезапустити веб-сервер і отримати необхідний результат.
У наведеному прикладі автоматом став Php-fpm 7.2. У кожному конкретному випадку можуть бути інші варіанти. Часто використовується Php 5 і відповідний йому швидкий менеджер.
Технологічні деталі
Php – популярний і використовується мова. Зовсім не образливо, що між 5 і 7 версією кудись поділася 6-я версія. Можна не згадувати, що Php 5.2.* і 5.6.* – це «різні» продукти.
Як будь-який інший мову, інтерпретатор Php страждає витоками пам’яті. До втрат пам’яті, особливо коли справа доходить до рекурсії, стека і інших «безконтрольних» ділянок коду, програмісти звикли. Стало нормою після виконання критичного ділянки коду знищувати все, що з ним пов’язане.
Проблемно і критично інше. З появою систем управління сайтами (CMS) стало звичним ганяти тонни марного (тобто не відображається коду з сервера в надра браузера, а вони не безмежні. Канали зв’язку гарні, але вони відчувають себе набагато спокійніше, коли по них переміщається тільки потрібна інформація.
Це дуже добре, що тепер є Php-fpm. Можна ефективно маніпулювати навантаженням, відокремлювати статику від динаміки. Але набагато краще, коли розробник створює веб-ресурс з мінімально можливим і якісним кодом.
Сучасні технології гарні тільки тоді, коли використовуються в тому обсязі і якості, коли вони ефективні, компактні і практичні.