Современное программирование - это распределенная обработка растущих объемов информации. Локальные инструменты в далеком прошлом. Актуальны веб-серверы, распределенные коллективы разработчиков и потребителей. Задачи и области применения превратились в потоки запросов, на которые нужны моментальные ответы.
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. Можно эффективно манипулировать нагрузкой, отделять статику от динамики. Но гораздо лучше, когда разработчик создает веб-ресурс с минимально возможным и качественным кодом.
Современные технологии хороши только тогда, когда используются в том объеме и качестве, когда они эффективны, компактны и практичны.