Elettracompany.com

Компьютерный справочник
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php в режиме fastcgi

Менеджер процессов FastCGI (FPM)

Содержание

FPM (FastCGI Process Manager, менеджер процессов 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.

    User Contributed Notes 8 notes

    Init script setup
    ===

    You will probably want to create an init script for your new php-fpm. Fortunately, PHP 5.3.3 provides one for you, which you should copy to your init directory and change permissions:

    /sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
    $ chmod 755 /etc/init.d/php-fpm

    It requires a certain amount of setup. First of all, make sure your php-fpm.conf file is set up to create a PID file when php-fpm starts. E.g.:
    —-
    pid = /var/run/php-fpm.pid
    —-
    (also make sure your php-fpm user has permission to create this file).

    Now open up your new init script (/etc/init.d/php-fpm) and set the variables at the top to their relevant values. E.g.:

    prefix=
    exec_prefix=
    php_fpm_BIN=/sbin/php-fpm
    php_fpm_CONF=/etc/php-fpm.conf
    php_fpm_PID=/var/run/php-fpm.pid

    Your init script is now ready. You should now be able to start, stop and reload php-fpm:

    $ /etc/init.d/php-fpm start
    $ /etc/init.d/php-fpm stop
    $ /etc/init.d/php-fpm reload

    The one remaining thing you may wish to do is to add your new php-fpm init script to system start-up. E.g. in CentOS:

    $ /sbin/chkconfig php-fpm on

    Disclaimer: Although I did just do this on my own server about 20 mins ago, everything I’ve written here is off the top of my head, so it may not be 100% correct. Also, allow for differences in system setup. Some understanding of what you are doing is assumed.

    I’m very unhappy with the way php-fpm handles requests.
    There isn’t even some SCRIPT_FILENAME in the RFC for CGI, an that’s the only standard I found to handle the requests.

    Actually what you are doing with PATH_TRANSLATED is supposed to translate to the path, which is broken by media wikis, as they use the PATH_INFO to find the ressource, not some script.

    In the original CGI context, the PATH_INFO is passed to the CGI binary to specify some ressource argument. So actually

    in command context.

    Conclusion: We should rewrite php-fpm to obey the rfc3875 CGI standard.
    Having SCRIPT_NAME pointing to /something.php, must translate to

    CWD is the working directory where php-fpm is started (or configured to change to).

    In case of chroot CWD = «».

    In any case the SCRIPT_NAME php script can be found with ./SCRIPT_NAME, from the CWD. So the undocumented not standardized SCRIPT_FILENAME should vanish! It breaks the CGI standard.

    PHP → Коротко о CGI, FastCGI, PHP-FPM и mod_php

    Решил навести в голове порядок о том, как работают вместе веб-сервер и PHP.

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

    В качестве CGI-программ могут использоваться программы/скрипты написанные на любых языках программирования, как на компилируемых, так и на скриптовых, и даже на shell.

    CGI-скрипты были популярны до того, как для веб-разработки стали преимущественно использовать PHP. Хотя сам PHP интерпретатор позволяет работать в режиме CGI (см. ниже).

    Основной момент: «CGI» это не язык программирования и не отдельная программа! Это просто протокол (стандарт, спецификация, соглашение, набор правил).

    FastCGI

    Дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ.

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

    Написание FastCGI программ-демонов сложнее чем CGI, нужны дополнительные библиотеки, зависящие от языка.

    Читать еще:  Matlab сортировка массива

    Опять же, сама аббревиатура FastCGI это не язык программирования и не отдельная программа, это как и в случае CGI — просто спецификация.

    PHP в режиме CGI

    PHP в режиме CGI это самый старый способ выполнения php-скриптов веб-сервером. Режим доступен по умолчанию, однако может быть отключён при компиляции.

    Для Apache нужен модуль mod_cgi (поставляется вместе с Apache). Nginx из коробки поддержки не имеет, хотя существуют дополнительные инструменты.

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

    PHP в режиме FastCGI

    Помимо CGI режима, PHP из коробки умеет работать и в FastCGI режиме (с версии 5.3 даже в двух FastCGI режимах). Режим включается флагом при компиляции интерпретатора, флаг зависит от версии PHP.

    Для работы с Apache нужен модуль mod_fcgid или mod_fastcgi, либо связка из mod_proxy_fcgi + PHP-FPM.

    Nginx умеет работать с FastCGI приложениями из коробки, но именно для PHP дополнительно нужен PHP-FPM (см. ниже).

    Следует помнить, что при работе PHP в режиме FastCGI в памяти висит сам php интерпретатор, а не какой-то конкретный php-скрипт.

    PHP-FPM

    FastCGI Process Manager, «Менеджер процессов FastCGI». Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.

    Изначально PHP-FPM представлял из себя набор патчей от Андрея Нигматулина, которые устраняли ряд проблем, мешающих полноценно использовать PHP в режиме FastCGI (список улучшений). С версии PHP 5.3 набор патчей включён в ядро, а дополнительные возможности PHP-FPM включаются флагом при компиляции.

    PHP-FPM используется в основном в связке с Nginx, без установки Apache.

    mod_php

    Это модуль для Apache, позволяющий ему выполнять php скрипты. Является наверно самым популярным и простым способом подружить Apache и PHP. Модуль не использует ни CGI, ни FastCGI. Есть свои минусы — скрипты работают под пользователем веб-сервера, невозможно использовать больше одной версии PHP.

    Комментарии

    недавно начали ддосить! взял сервак нанял сисадмина настроил все гуд!
    Nginx + PHP-FPM

    отличная статья. Коротко, по делу и дает ответы на все вопросы. спасибо!

    Спасибо большое! Познавательно

    Замечательная статья. Заменила две недели поисков информации в интернете.

    Спасибо большое!
    Подскажите, а PHP-FPM содержит в себе php? Если я ставлю PHP-FPM мне не нужно ставить php, получается это как бы надстройка над интерпретатором ?

    Смотря что, как и где ставите. Читайте документацию.

    а в случае PHP-FPM сам скрипт компилируется 1 раз и потом отдаётся всем уже из памяти?

    если не стоит какой-нибудь opcache, который это умеет, то нет

    стоит, стоит, конечно стоит
    он же в составе идёт с 5.5 вроде

    Основной момент: «CGI» это не язык программирования и не отдельная программа! Это просто протокол (стандарт, спецификация, соглашение, набор правил).

    Спасибо. Коротко, емко, грамотно!

    Большое спасибо за статью! Лаконично и понятно.

    Спасибо, понятно и по полочкам)))

    Спасибо за статью, многое, что не мог нигде найти стало понятно!

    Режимы работы PHP

    Интерпретатор PHP может работать в нескольких режимах. В этой статье рассматриваются следующие режимы работы:

    Каждый из указанных режимов имеет как преимущества, так и недостатки. Те и другие качества в представляем ниже.

    Содержание

    PHP как модуль Apache (mod_php)

    Этот режим предполагает подключение модуля mod_php в настройках веб-сервера Apache. В этом случае каждый процесс веб-сервера будет включать в себя этот модуль. Выбор этого режима особенно подходит для небольших сайтов с малой посещаемостью.

    Преимущества:

    • Доступны настройки кэширования, за счет чего можно увеличить производительность.
    • Быстрое исполнение скриптов.

    Недостатки:

    • Конфигурирование можно выполнять только через основной файл php.ini и некоторые параметры можно объявить через файл htaccess.
    • По умолчанию скрипты запускаются с правами пользователя apache. Однако это можно изменить путем использования mod_ruid, который позволяет запускать скрипты от разных пользователей.
    • Подгрузка модуля происходит во все процессы apache даже при отсутствии запросов на тип скрипта, обрабатываемый этим модулем. За счет этого создается бесполезная нагрузка на сервер.
    • Скрипт, имеющий ошибки, может привести к сбою работы веб-сервера.
    • Нет простого способа узнать, каким пользователем было запущено стороннее приложение.
    • Некоторые модули имеют проблемы в совместимости с многопоточным запуском веб-сервера (MPM Worker).

    PHP в режиме CGI

    В этом режиме запускается интерпретатор php-cgi для всех скриптов, для которых установлен CGI в качестве обработчика. Если большая часть сайта состоит из статического содержимого, то CGI будет хорошим выбором, т.к. будет обеспечено экономичное использование оперативной памяти за счет того, что интерпретатор будет вызываться в случае необходимости. Но и в то же время такой метод замедляет исполнение, т.к. при каждом запросе понадобится загрузка интерпретатора в память.

    Преимущества:

    • Обработчик CGI может быть запущен с правами любого пользователя системы (с помощью suexec).
    • Конфигурацию PHP можно сделать индивидуальной для каждого пользователя.
    • CGI использует оперативную память только если это действительно необходимо.
    • Благодаря тому, что PHP интерпретатор работает как независимый процесс, вероятность сбоя работы Apache из-за ошибок в скриптах практически нулевая.
    • Каждый клиент может выбрать индивидуальную версию PHP.
    Читать еще:  Защитный диод супрессор

    Недостатки:

    • Не высокая производительность.
    • Разработка PHP-авторизации с командой Header имеет ограничения по причине того, что скрипт будет получать не все необходимые серверные переменные.

    SuPHP

    SuPHP является частным случаем CGI, в котором каждый php скрипт может выполняться с привилегиями разных пользователей.

    Преимущества:

    • Можно отследить, от имени какого пользователя запускался скрипт.
    • Пользователь не сможет запустить скрипты, если он не является их владельцем.
    • Для всех файлов, которые будут загружены на сервер через сайт, будет установлен владельцем тот пользователь, от имени которого эти файлы загружались.

    Недостатки:

    • Сравнительно с CGI более высокая нагрузка на CPU.
    • Недоступны функции кэширования, например, XCache, APC и др.

    PHP в режиме FastCGI (mod_fastcgi)

    По своим свойствам FastCGI является золотой серединой между mod_php и CGI режимами. В нём исключены недостатки CGI и присутствуют его достоинства. При включенном FastCGI, в ОЗУ сервера располагается постоянно запущенный процесс-обработчик. Это избавляет от необходимости при каждом запросе запускать новый процесс, как в случае использования CGI. По быстродействию FastCGI аналогичен mod_php.

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

    Преимущества:

    • Можно улучшить производительность используя кэширование.
    • Скрипты запускаются от имени их владельца.
    • Риск зависания минимизирован за счет существования переменной, определяющей количество запросов, которые можно обслужить до плановой перезагрузки интерпретатора.

    Недостатки:

    • Постоянно запущенный процесс интерпретатора создает нагрузку на оперативную память, хотя её объем меньше, чем при использовании PHP как модуля Apache. Это достигается за счет отсутствия необходимости обращения к интерпретатору PHP при выдаче статического содержимого.

    LSPHP

    LiteSpeed PHP (LSPHP) — реализован в виде модуля mod_lsapi на веб-сервере Apache и является наиболее производительным вариантом запуска PHP на серверах под управлением сPanel.

    • Увеличение скорости обработки PHP-скриптов, что ускоряет работу всего сайта.
    • Отсутствие 500-ой ошибки при наличии php_flag и подобных директив в .htaccess. Актуально при переезде с хостинга, который по умолчанию работал с mod_php.
    • Уменьшится потребление ресурсов в вашем виртуальном контейнере.
    • Улучшится эффективность работы Opcode Cache

    На данный момент недостатков не было обнаружено.

    Более подробно о работе LSPHP можно прочитать в нашем блоге в статье «Ускорьте работу своего сайта, перейдя на LSPHP».

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

    Каким образом узнать текущий режим PHP?

    Способ 1. С помощью функции phpinfo()

    • Создаем на хостинге php-файл c произвольным именем (например, info.php), после чего открываем его для редактирования и копируем в него следующие строки:
    • Сохраняем внесенные изменения, после чего открываем файл в браузере.
    • Если все данные были указаны верно, то в браузере будет выведена страница с развернутой информацией об установленном PHP. В перечне выведенных параметров будет присутствовать параметр Server API, в значении которого и отображается текущий режим PHP.
    • На изображении ниже показано значение параметра Server API в случае использования режима FastCGI.

    Способ 2. С помощью функции функции php_sapi_name()

    • По аналогии первого способа, создаем на хостинге файл, например, info.php, затем открываем для редактирования и затем копируем следующий код:
    • После сохранения изменений открываем этот файл в браузере. В итоге должна быть отображена страница в теле которой будет выведено название используемого режима PHP. На изображении ниже представлен пример вывода при использовании режима FastCGI.

    Уже знаете, какое доменное имя хотите получить для вашего веб-сайта? У нас вы можете купить домен дешево. Нужен хостинг? HOSTiQ предлагает интересные планы виртуального хостинга, а также вы сможете заказать VPS-сервер или арендовать сервер в Европе или США.

    Переезд сайта на FastCGI (nginx + php-fpm)

    Данная статья посвящена оптимизации сайтов, а именно изменению работы PHP на FastCGI (nginx + php-fpm). Это необходимо, если Вы используете режим FastCGI (как модуль apache), CGI.

    Помимо преимуществ в виде скорости работы, у данного метода работы PHP также есть и недостаток. Т.к. мы убираем из связки Apache, то перестанет работать файл .htaccess. Если у Вас есть
    правила в данном файле, то необходимо будет сконвертировать их с помощью сервиса winginx.com/ru/htaccess и добавить в конфиг файл в пункте 4 данного мануала.

    Если Вы используете режим LSAPI на нашем обычном виртуальном хостинге, то он также является достаточно производительным. Для использования FastCGI (nginx + php-fpm) необходимо заказать линейку мощных тарифов, подходящих для работы на любых CMS.

    Внимание! Для перевода сайта на CMS WordPress, Joomla, OpenCart, Bitrix необходимы дополнительные действия, и сейчас мы их разберем.

    Внимание! Данный мануал подходит для VPS серверов с панелью управления ISPmanager Lite 5. Для изменения на тарифах мощного виртуального хостинга свяжитесь, пожалуйста, с отделом продаж.

    Читать еще:  Трехмерная графика matlab

    1. Зайдите в панель управления хостингом под root пользователем (не обычным пользователем) в раздел www-домены. Далее Вам необходимо посмотреть, какому пользователю принадлежит сайт, который Вы хотите перевести на FastCGI, и на какой версии php он работает.

    Запоминаем владельца и версию php

    2) После этого, нам надо зайти во вкладку пользователи, выбрать пользователя, которому принадлежит сайт, и нажать на него 2 раза .

    3) Выбираем пункт «Версия PHP (PHP-FPM)». В нем необходимо выставить такую же версию php, какая сейчас стоит у Вас на сайте. После выставления, нажимаем «Ok«.

    Выставляем такую же версию, как у нас стояла на режиме apache

    4) После этого возвращаемся во вкладку www-домены и меняем прежний режим работы на FastCGI (nginx + php-fpm) Сохраняем изменения.

    Теперь мы можем попробовать зайти на сайт и проверить, все ли ссылки на сайте работают корректно, но, как правило, работает только главная страница, а все остальные отдают 404 ошибку.

    Если у Вас похожая ситуация, то необходимо прописать дополнительный редирект.

    5) Для этого в той же вкладке www-домены выбираем домен и нажимаем на кнопку «Конфиг».

    Далее, в зависимости от Вашей CMS, выбираем один из вариантов:

    a) Если у Вас WordPress, Joomla

    Под ней необходимо добавить наш редирект:

    try_files $uri $uri/ /index.php?q=$uri&$args;

    В конечном итоге, у нас получится такой блок:

    б) Если у Вас Битрикс

    Редирект необходимо будет прописать после блока location @php < , и выглядеть он будет по другому:

    ^/(?!(.well-known)) <
    if (!-e $request_filename) <
    rewrite ^(.*)$ /bitrix/urlrewrite.php last;
    >
    >

    if (!-f $request_filename) <
    rewrite ^(.*)/index.php$ $1/ redirect;
    >

    Должно получиться вот так:

    в) Если у Вас Opencart, то редирект необходимо вставить до location / :

    if (!-e $request_filename) <
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    >

    ВАЖНО. Если у Вас на сайте используется SSL сертификат, то таких блоков у Вас будет два в разделе «конфиг». Необходимо прописать отдельно для http блока, и отдельно для https блока.

    После того, как Вы прописали редирект, сохраняем конфиг и проверяем работу сайта.

    Если по каким-то причинам Вам не удалось перейти на FastCGI (nginx + php-fpm), свяжитесь с нашей техподдержкой, и мы обязательно Вам поможем.

    PHP-FPM — менеджер процессов PHP FastCGI

    PHP-FPM — это альтернативная реализация PHP FastCGI с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.

    FastCGI, PHP и PHP-FPM

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

    PHP «умеет» работать в режиме FastCGI и без PHP-FPM, но PHP-FPM устраняет ряд проблем мешающих использовать PHP в режиме FastCGI на высоконагруженных системах.

    PHP-FPM — это:

    • продвинутое управление процессами с корректной процедурой остановки и запуска;
    • возможность запуска воркеров с различными окружением (uid, gid, chroot);
    • возможность запуска воркеров на различных портах с использованием разных конфигураций php.ini;
    • логирование стандартных потоков вывода (stdout) и ошибок (stderr);
    • аварийный перезапуск в случае внезапного разрушения opcode-кэша;
    • поддержка ускоренной загрузки (accelerated upload);
    • логирование медленно выполняющихся скриптов (включая трассировки);
    • динамическое или статическое порождение дочерних процессов;
    • доступность базовой информации о статусе SAPI (аналогично Apache mod_status);
    • конфигурация php-fpm.conf основана на стандартном синтаксисе php.ini.

    Использование PHP-FPM

    Наиболее часто используется связка nginx и PHP-FPM, которая работает эффективнее «классического» использования Apache с mod_php, а в ряде случаев показывает более высокую производительность, нежели более «продвинутое» использование в качестве фронтенда веб-сервера nginx, а в качестве бекенда — Apache с mod_php.

    Язык программирования PHP

    PHP — язык программирования, который наиболее распространён в сфере веб-разработки.

    В сфере создания динамических веб-сайтов и веб-приложений PHP занимает значительную долю рынка. Практически все популярные CMS для веб-разработки написаны на PHP. Наиболее важные преимущества PHP — простота освоения, адекватная скорость работы, мультипарадигмальность. Критикуют PHP обычно за низкий средний уровень разработчиков и, как следствие, за низкую культуру разработки, проблемы с сопровождаемостью и надёжности проектов.

    PHP — язык для веб-разработки, который можно назвать основным для «масс-маркета», то есть для разработки типовых сайтов на коробочных CMS.

    PHP — скриптовый язык общего назначения, часто применяемый для разработки веб-сайтов.

    PHP — интерпретируемый язык программирования, позволяющий создавать программы в процедурном и объектно-ориентированном стиле. PHP — хороший язык для разработки проектов на CMS. И c технической точки зрения современный PHP весьма неплох. Но экосистема языка и особенности кадрового рынка делают PHP не самым лучшим выбором для разработки сложных проектов.

    Ссылка на основную публикацию
    Adblock
    detector