Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Варианты настройки MPM для apache mpm-prefork(mpm-worker)с mod_php(php-fpm) + nginx reverse proxy и их сравнение

Лекция



Привет, Вы узнаете о том , что такое варианты настройки mpm для apache, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое варианты настройки mpm для apache, mpm-prefork, mpm-worker, mod_php, php-fpm, nginx reverse proxy, php настройка , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

Мне не доводилось пока участвовать в высоконагруженных проектах, поэтому было проведено небольшое исследование материалов в сети. Из блога в блог кочует утверждение, что необходимо отказаться от использования Apache в пользу Nginx. Это утверждение мне показалось странным, учитывая историю проекта Apache и сообщество разработчиков вокруг него. Неужели разработчики Apache не могут решить проблему ругаемого везде режима prefork? Так ли это на самом деле я и решил выяснить. О результатах читайте под катом.

Подготовка


Изучив тему более детально, выяснялось, что помимо MPM (Multi-Processing Module) prefork у апача также существуют модули mpm-worker и mpm-event, которые в одном программном потоке обрабатывают запросы от нескольких пользователей. Модули mpm-event и mpm-prefork связываются с php через fastcgi. Сравнить их работу c nginx и было решено.

Первым делом я решил посмотреть как поведет себя Apache в режиме prefork при большом количестве запросов. Была запущена утилита siege с 40 потоками. Apache создал множество процессов и логи заполнились сообщениями о переполнении памяти. После чего сервер стал недоступен и пришлось делать terminate для данного инстанса, так как на reboot дождаться реакции в течении 5 минут так и не удалось. Был создан новый инстанс, к которому был подключен старый ebs. В итоге опытным путем было установлено, что на EC2 MicroInstance с ее объемом памяти в 630МБ оптимальными являются следующие настройки:

    StartServers          3
    MinSpareServers       3
    MaxSpareServers       7
    MaxClients           27
    MaxRequestsPerChild   3000


Теперь можно было нагружать сервер, не боясь потерять его управление.

Было решено протестировать следующие конфигурации:

  • apache mpm-prefork с mod_php
  • apache mpm-prefork с mod_php + nginx reverse proxy
  • nginx с php-fpm
  • apache mpm-worker с php-fpm
  • apache mpm-event с php-fpm


В процессе тестирования пришла мысль, что ничто не мешает apache в режиме mpm-prefork работать с php-fpm и данная конфигурация также была добавлена в тесты.

О том, как установить используемые в этой статье конфигурации я рассказывать не буду, вы без труда можете найти данную информацию на просторах интеренета. Отмечу лишь, что во многих howto дублируется одна и та же ошибка для связки mpm-worker или mpm-event с php, а именно: в командах пакетного менеджера указано устанавливать пакет php5, на самом деле необходимо устанавливать пакет php5-cgi.

Меня интересовало прежде всего, какое количество запросов сможет выдержать вэбсервер. Поэтому я решил использовать для тестов утилиту siege. Поэксперементировав с JMeter, я пришел к выводу, что он больше подходит для выяснения времени реакции на те или иные события. Таким образом, основной интересующий меня параметр из вывода результатов утилиты siege был Availablility. Исходя из этого, были подобраны параметры утилиты siege, чтобы Availability была менее 100%, но не слишком мала. На всех тестах использовалось количество потоков 20 (-c) количество повторений 20 (-r) режим benchmark (-b).

Для обработки результатов тестов был создан Excel файл, в таблицы которого вводились результаты выводимые утилитой siege. По результатам пяти тестов находится среднее арифметическое и среднеквадратичная погрешность среднего арифметического. Строится диаграмма Availability для разных конфигураций.

Был написан простенький скрипт, который выполняет необходимое количество тестов и обрабатывает результаты вывода siege для копипасты в Excel:

#!/bin/bash
n=1
touch tmp.out
while [ $n -le $2 ]
do
        siege -b -q -c 20 -r 20 -i -f $1 >> tmp.out 2>&1
        sleep 60
        n=$(( n+1 ))
done
cat tmp.out | sed -nE '/Transactions/,/Shortest/p' | awk -F":" '{print $2}' | awk -F" " '{print $1}'| sed 's/\./,/g' | xargs -L12 | sed 's/ /;/g'
rm tmp.out


Параметрами скрипта являются файл URL'ов, который генерировался из sitemap, и количество итераций в случае данных тестов всегда было равно 5. sleep 60 необходим для завершения всех очередей от предыдущей итерации.

По ходу было решено прицепить к сайту CDN CloudFlare, и, заодно посмотреть, как данный сервис влияет на нагрузочную способность вэбсервера. Для этого в DNS CloudFlare был добавлен субдомен с прямым адресом сайта и добавлен алиас в настройках виртуального хоста. Также был создан еще один файл URL'ов для прямого доступа к сайту.

Результаты


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

Варианты настройки MPM для apache mpm-prefork(mpm-worker)с mod_php(php-fpm) + nginx reverse proxy и их сравнение
Варианты настройки MPM для apache mpm-prefork(mpm-worker)с mod_php(php-fpm) + nginx reverse proxy и их сравнение
Не понятно почему выделяется из общей тенденции apache mpm-prefork через CloudFlare.

Так как полученные результаты имели большие погрешности из-за значительного разброса значений каждого прохода, было решено провести дополнительный тест на локальной виртуальной машине. Для этого была создана гостевая система Ubuntu 10.04 LTS на VirtualBox, с параметрами идентичными EC2 MicroInstance (1vCPU,630MB,8GB). Чтобы получить похожий процент отказов, я ограничил максимальную загрузку процессора доступную виртуальной машине в 7% (Intel Core i7 2.8 ГГц). Подробные результату этого теста можете посмотреть в этом файле.
Варианты настройки MPM для apache mpm-prefork(mpm-worker)с mod_php(php-fpm) + nginx reverse proxy и их сравнение
Соотношение результатов похоже на тест через CloudFlare.

Выводы

  1. Рекомендуемая во многих мануалах связка Apache и Nginx как reverse proxy, не пренесет желаемого результата, еcли на вашем сайте мало статических ресурсов.
  2. Apache может успешно конкурировать с Nginx, если установить вместо модуля mpm-prefork модули mpm-worker или mpm-event.
  3. Apache может конкурировать с Nginx даже если вы используете модуль mpm-prefork, при этом необходимо использовать php-fpm через fastcgi.
  4. Если вы используете модуль mpm-prefork не забудьте ограничить количество процессов соответственно ресурсам вашей системы.
  5. Использование CDN CloudFlare на бесплатном тарифе не дает ощутимого увеличения нагрузочной способности. Плюсом можно считать, что в случае полной недоступности сайта CloudFlare выдаст сохраненный «снимок» запрашиваемой страницы.

Apache: MPM – worker, prefork или event?

MPM – Multi-Processing Module, можно перевести как “Модуль мультипроцессовой обработки” (не путайте с мультипроцессорной!).

Если быть совсем кратким – MPM используется сервером Apache для обработки нескольких запросов несколькими процессами одновременно.

В настоящее время используется 2 основных варианта MPM – это Worker и PreFork. Также, имеется сравнительно новый модуль – Event, который только недавно перешел из стадии‘experimental‘ в ‘stable‘.

В этой статье постараемся разобраться – в чем разница между этими тремя MPM- Worker, PreFork и Event.

Итак, начнем с модуля PreFork – на данный момент он является наиболее распространенным модулем, и по умолчанию Apache устанавливается именно с ним.

Apache MPM PreFork запускает по отдельному процессу на каждый запрос. Иначе говоря, каждый процесс одновременно обрабатывает только 1 поток (thread) на одно соединение. Т.к.PreFork заранее создает определенное количество процессов, которые не требуют времени на отдельный вызов при поступлении запроса к серверу и не нуждаются в выполнении маршалинга(в технологии ORPC – процесс упаковки запроса, включая параметры, в стандартный формат, пригодный для передачи по сети) во время его обработки, то такой вариант является наиболее быстродействующим, по сравнению с другими MPM. Однако, такой прирост производительности имеется только в случае, когда одновременно поступает некоторое ограниченное количество одновременных запросов, т.к. каждый из них должен ждать, пока процессор сможет их обработать. Кроме того, попытки увеличить количество одновременно запускаемых процессов способно серьезно повлиять на используемую сервером память.

Одним из важнейших преимуществ такого MPM является его большая безопасность, в силу того, что каждый процесс фактически изолирован от других. Его использование оправдано в тех случаях, когда используются модули, которые не поддерживают или плохо поддерживают, например – mod_php.

Apache MPM worker – использует многопоточную систему обработки запросов, что улучшает обработку большого количества соединений. MPM Worker запускает несколько процессов, которые, в свою очередь, запускают несколько потоков (threads). Об этом говорит сайт https://intellect.icu . Эти “дочерние потоки”, по аналогии с процессами MPM PreFork, ожидают входящих клиентских запросов. Такой подход является менее ресурсоемким в плане потребления оперативной памяти сервера, в отличии от процессов PreFork. Так же, улучшается обработка большого количества одновременных запросов, т.к. в отличии от PreFork запросу необходимо только получить свободный поток, который как правило есть, что позволяет сэкономить ресурсы сервера.

К недостаткам MPM Worker относится его относительная нестабильность, по сравнению сPreFork, т.к. проблемы в одном процессе могут затронуть другие соединения.Кроме того, имейте ввиду, что Worker связывает каждое keep-alive соединение с потоком, а не с запросом, и в таком случае каждый поток может выполнятся значительное время, пока соединение не будет окончательно разорвано.

И последний – Apache MPM Event. По принципу работы он очень похож на MPM Worker. Главное отличие Event от Worker в том, что он поддерживает выделенный поток для каждого установленного соединения, и передает дочерним потокам запрос только после того, как он был непосредственно сделан. И сразу же после обработки этого запроса – поток освобождается для выполнения следующего запроса. Такой вариант отлично подходит для клиентов, которые делают не частые запросы, но поддерживают долгие keep-alive соединения с сервером.

Исключением является обработка SSL-соединений, в таких случаях Event ведет себя аналогичноWorker-у.

Что касается сравнения работы Worker и PreFork – то можно увидеть сравнения напримертут>>>. Как видно, разница между ними всего несколько процентов, однако – все зависит от специфики каждого сервера и обрабатываемых им запросов.

Кроме того, многие из сравнительно старых модулей Apache требуют наличия именно MPM PreFork, что следует учитывать при выборе Multi-Processing Module для вашего сервера.

Так же, существуют еще несколько вариантов MPMmpm-itk, mpm-peruser и другие>>>.

Напоследок – несколько полезных команд.

Узнать, какой тип MPM используется в установленном Apache можно любой из команд:

# apachectl -t -D DUMP_MODULES | grep mpm
mpm_prefork_module (static)

или

# httpd -V | grep mpm
-D APACHE_MPM_DIR=”server/mpm/prefork”

Установить Apache с выбранным MPM можно из соответствующего порта:

/usr/ports/www # ls | grep apache

apache22
apache22-event-mpm
apache22-itk-mpm
apache22-peruser-mpm
apache22-worker-mpm

Порт apache22 – установит Apache с mpm_prefork.

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

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

  • PHP как модуль Apache
  • CGI
  • SuPHP
  • FastCGI

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

Содержание

  • 1 PHP как модуль Apache (mod_php)
  • 2 PHP в режиме FastCGI (mod_fastcgi)
  • 3 PHP в режиме CGI
  • 4 SuPHP
  • 5 Каким образом узнать текущий режим PHP?

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

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

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

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

Недостатки:

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

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

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

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

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

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

Недостатки:

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

PHP в режиме CGI

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

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

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

Недостатки:

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

SuPHP

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

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

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

Недостатки:

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

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

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

  • Создаем на хостинге php-файл c произвольным именем (например, info.php), после чего открываем его для редактирования и копируем в него следующие строки:

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

Варианты настройки MPM для apache mpm-prefork(mpm-worker)с mod_php(php-fpm) + nginx reverse proxy и их сравнение

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

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

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

Варианты настройки MPM для apache mpm-prefork(mpm-worker)с mod_php(php-fpm) + nginx reverse proxy и их сравнение

Apache - выбор MPM

Apache зарекомендовал себя как функциональный и стабильный веб-сервер, однако не стоит забывать о том, что Apache - очень "тяжелое" приложение в плане системных ресурсов сервера. Apache предоставляет возможность использовать разные варианты реализации MPM.

MPM - Multi-Processing Module, дословно "Модуль мультипроцессовой обработки". MPM используется Apache для обработки нескольких запросов одновременно несколькими процессами, то есть, по сути, занимается распаралеливанием обработки запросов.

На данный момент Apache поддерживает множество MPM. Основные из них рассмотрены в таблице.

MPM Поддерживаемые OS Описание Основное назначение
apache-ITK Linux, FreeBSD MPM, основанная на модели prefork. Позволяет запуск каждого виртуального хоста под отдельными uid и gid. Хостинговые серверы, серверы, критичные к изоляции пользователей и учету ресурсов.
event FreeBSD, Linux MPM, основанная на модели worker. Обрабатывает большее количество запросов за счет освобождения основных потоков для новых запросов. Высоконагруженные серверы. Использовать только в Apache 2.4 (для apache 2.2 - "This MPM is experimental, so it may or may not work as expected."
netware Novell NetWare Мультипоточная модель, оптимизированная для работы в среде NetWare. Серверы Novell NetWare
perchild Linux Гибридная модель, с фиксированным количеством процессов. Высоконагруженные серверы, возможность запуска дочерних процессов используя другое имя пользователя для повышения безопасности.
peruser Linux, FreeBSD Модель, созданная на базе MPM perchild. Позволяет запуск каждого виртуального хоста под отдельными uid и gid. Не использует потоки. Обеспечение повышенной безопасности, работа с библиотеками, не поддерживающими threads.
pre-fork Linux, FreeBSD MPM, основанная на предварительном создании отдельных процессов, не использующая механизм threads. Большая безопасность и стабильность за счет изоляции процессов друг от друга, сохранение совместимости со старыми библиотеками, не поддерживающими threads.
winnt Microsoft Windows Мультипоточная модель, созданная для операционной системы Microsoft Windows. Серверы под управлением Windows Server.
worker Linux, FreeBSD Гибридная мультипроцессная-мультипоточная модель. Сохраняя стабильность мультипроцессных решений, она позволяет обслуживать большое число клиентов с минимальным использованием ресурсов. Среднезагруженные веб-серверы.

На FreeBSD по умолчанию Apache использует pre-fork MPM. Более детально о различиях в работе MPM описывать не буду - как всегда, катастрофически не хватает времени. Из собственного опыта:

  • для важных и критичных к отказу сервисов - pre-fork MPM
  • для хостинг-серверов - apache-ITK MPM
  • для высоконагруженых серверов - event MPM

Узнать текущую версию MPM работающего сервера можно такой командой:

# httpd -V | grep mpm

-D APACHE_MPM_DIR="server/mpm/prefork"

Выполнить установку Apache с определенным MPM можно из соответствующего порта:

# ls /usr/ports/www | grep mpm

apache22-event-mpm
apache22-itk-mpm
apache22-peruser-mpm
apache22-worker-mpm

Встроенный web-сервер в PHP

Внимание!

Этот web-сервер был разработан для помощи в разработке. Он также может быть полезным в тестовых целях или для демонстрации приложения, запускаемого в полностью контролируемом окружении. Он не выполняет функции полноценного web-сервера и не должен использоваться во общедоступных сетях.

Таким образов встроенный веб сервер использовать не безопасно в открытых сетях. и предназначен лишь для локальной разработки.

Часто используется в фремворках, наприер в ларавел

$ php artisan serve  --port=8080
Laravel development server started on http://localhost:8000

чтобы остановить
нажмите ctl+C

Начиная с версии PHP 5.4.0 модуль CLI SAPI содержит встроенный web-сервер.

Если запрос блокирующий, то PHP приложения будут приостановлены.

URI запросы обслуживаются из текущей директории, в которой был запущен PHP, если не используется опция -t для явного указания корневого документа. Если URI запроса не указывает на определенный файл, то будет возвращен либо index.php либо index.html в указанной директории. Если оба файла отсутствуют, то возвращается 404 код ответа.

Если PHP-файл указывается в командной строке, когда запускается веб-сервер, то он рассматривается как скрипт "маршрутизации". Скрипт выполняется в самом начале после каждого HTTP-запроса. Если этот скрипт возвращает FALSE, то запрашиваемый ресурс возвращается как есть. В противном случае браузеру будет возвращен вывод этого скрипта.

Стандартные MIME-типы возвращаются для файлов со следующими расширениями: .3gp, .apk, .avi, .bmp, .css, .csv, .doc, .docx, .flac, .gif, .gz, .gzip, .htm, .html, .ics, .jpe, .jpeg, .jpg, .js, .kml, .kmz, .m4a, .mov, .mp3, .mp4, .mpeg, .mpg, .odp, .ods, .odt, .oga, .ogg, .ogv, .pdf, .pdf, .png, .pps, .pptx, .qt, .svg, .swf, .tar, .text, .tif, .txt, .wav, .webm, .wmv, .xls, .xlsx, .xml, .xsl, .xsd, и .zip.

История правок: Поддерживаемые MIME-типы (расширения файлов)
Версия Описание
5.5.12 .xml, .xsl, и .xsd
5.5.7 .3gp, .apk, .avi, .bmp, .csv, .doc, .docx, .flac, .gz, .gzip, .ics, .kml, .kmz, .m4a, .mp3, .mp4, .mpg, .mpeg, .mov, .odp, .ods, .odt, .oga, .pdf, .pptx, .pps, .qt, .swf, .tar, .text, .tif, .wav, .wmv, .xls, .xlsx, и .zip
5.5.5 .pdf
5.4.11 .ogg, .ogv, и .webm
5.4.4 .htm и .svg

Пример #1 Запуск web-сервера

$ cd ~/public_html
$ php -S localhost:8000

В консоли выведется:

PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit

После URI запросов http://localhost:8000/ и http://localhost:8000/myscript.html в консоли выведется примерно следующее:

PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read

Пример #2 Запуск с указанием корневой директории

$ cd ~/public_html
$ php -S localhost:8000 -t foo/

В консоли выведется:

PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
Listening on localhost:8000
Document root is /home/me/public_html/foo
Press Ctrl-C to quit

Пример #3 Использование скрипта маршрутизации

В этом примере, запросы изображений будут возвращать их, но запросы HTML файлов будут возвращать "Welcome to PHP".

// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false; // сервер возвращает файлы напрямую.
} else {
echo "

Welcome to PHP

";
}
?>

$ php -S localhost:8000 router.php

Пример #4 Проверка использования CLI web-сервера

Для совместного использования скрипта маршрутизации при разработке с CLI web-сервером и в дальнейшем с боевым web-сервером:

// router.php
if (php_sapi_name() == 'cli-server') {
/* Маршрутизация с заданными правилами и выход с возвращением false */
}
/* продолжение с обычными операциями index.php */
?>

$ php -S localhost:8000 router.php

Пример #5 Поддержка неподдерживаемых типов файлов

Если вам нужно обслуживать статические ресурсы с MIME типами неподдерживаемыми CLI web-сервером:

// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "el") {
header("Content-Type: text/x-script.elisp");
readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
return FALSE;
}
?>

$ php -S localhost:8000 router.php

Пример #6 Доступ к CLI web-серверу с удаленных машин

Вы можете сделать web-сервер доступным на 8000 порту для всех сетевых интерфейсов:

$ php -S 0.0.0.0:8000


Настройка и изменение MPM для apache2 ubunutu

Проверьте, какие MPM Apache в настоящее время использует:

apachectl -V | grep -i mpm

Result:
Server MPM:     prefork

Список доступных модулей MPM (Убедитесь, что mpm_worker указана)

ls /etc/apache2/mods-available/mpm*

Result:
/etc/apache2/mods-available/mpm_event.conf  /etc/apache2/mods-available/mpm_prefork.conf  /etc/apache2/mods-available/mpm_worker.conf
/etc/apache2/mods-available/mpm_event.load  /etc/apache2/mods-available/mpm_prefork.load  /etc/apache2/mods-available/mpm_worker.load

Список разрешенных модули MPM (Если mpm_worker не включен, мы должны включить его и отключить модуль mpm_prefork)

ls -l /etc/apache2/mods-enabled/mpm*

Result:
/etc/apache2/mods-enabled/mpm_prefork.conf -> ../mods-available/mpm_prefork.conf
/etc/apache2/mods-enabled/mpm_prefork.load -> ../mods-available/mpm_prefork.load

Отключить модуль MPM_PREFORK

a2dismod mpm_prefork

Включить модуль MPM_WORKER

a2enmod mpm_worker

Для того, чтобы проверить, если Apache работает на MPM_worker

apachectl -V | grep -i mpm

Result:
Server MPM:     worker


обратите внимание что
worker не используется с апачем с php модулем
а nginx(proxy)+ mpm_prefork+php-fpm  будет проблемым из-за большого колва процессов и большогопотребления памяти, при этом nginx  не даст особый эффект

оптимальные варианты использования

nginx(fast-cgi)+php-fpm
или
nginx(proxy)+apahe(php-module,mpm_prefork)

или 
nginx(proxy)+apahe(php-fpm,mpm_worker)

Выводы из данной статьи про варианты настройки mpm для apache указывают на необходимость использования современных методов для оптимизации любых систем. Надеюсь, что теперь ты понял что такое варианты настройки mpm для apache, mpm-prefork, mpm-worker, mod_php, php-fpm, nginx reverse proxy, php настройка и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

создано: 2016-07-19
обновлено: 2020-05-09
133201



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)