Подключаем модуль mpm_worker — apache2 (v2.4) для платформы deb
Так как в редких случаях модуль mpm_prefork даёт сбой соединения, тем самым влечёт критическое завершение процесса с сигналом 11.Проблемой этого является то, что модуль prefork запускает по отдельному процессу на каждый запрос, при подключения множества одновременных запросов потребляет большое количество оперативной памяти и при нехватки ресурсов один из процессов может завершится критически.
Требуется включение иной обработки запросов и соединений. Выбор будет mpm_worker или mpm_event.
mpm_worker — хорош в много-поточной системе обработки запросов, тем самым повышает эффективность большого количества соединений. Работа данного модуля заключается в запуске процесса, который разветвляется на несколько потоков, эти потоки работаю как процессы в модуле mpm_prefork они всегда в ожидании входящих запросов от клиента. Worker готов обработать большое количество одновременных запросов, так как каждый запрос требует готовый поток, который уже его ожидает, а в случае с prefork требуется запустить процесс, что является намного требовательней. Благодаря такой системе mpm_worker экономит значительное потребление оперативной памяти в сравнение с mpm_prefork.
mpm_event — практически аналогичен mpm_worker, но есть некоторые отличия. Event использует 1 выделенный поток, который разветвляется на другие потоки. Выделенный поток передает запрос в разветвленные потоки, только после того как запрос был осуществлен. Как только запрос будет выполнен, поток освобождается и ожидает следующий запрос или выполняет его в порядке очереди. Данный модуль подойдет в том случае, если клиенты не часто отправляют запросы, а чаще используют постоянное соединение с сервером.
Использование mpm_worker гораздо эффективней, поэтому в данной статье мы рассмотрим подключения модуля для apache2 именно mpm_worker.
Проверяем какие модули подключены:
ls -l /etc/apache2/mods-enable/
Проверка на каком mpm уже запущен apache2
apachectl -V | grep -i mpm
Если при попытке подключения модуля mpm_worker командой:
sudo a2enmod mpm_worker
При запуске apache2 командой
Вы видите ошибку:sudo service apache2 start
apache is running a threaded MPM, but yout PHP module is not compiled to be threadsafe. you need to recompile PHP
Стопим сервер:
sudo service apache2 stop
Так как prefork использует модуль php5, а worker cgi, придётся удалить модуль php5, без паники модуль сgi интегрирует в себя модули для работы php5:
apt-get remove libapache2-mod-php5
Устанавливаем модуль mpm_worker:
apt-get install apache2-mpm-worker libapache2-mod-fcgid
Подключаем модуль fastCgi
sudo a2enmod fcgid
Устанавливаем сgi-php5 и консольную версию:
apt-get install php5-cgi php5-cli
Редактируем Директивы сервера:
Пример: /etc/apache2/apache2.conf
Добавляем директивы к существующим.
P.S. Для Алисов aptitude должен быть установлен.<Directory /var/www> AddHandler fcgid-script .php FCGIWrapper /usr/lib/cgi-bin/php5 .php Options +ExecCGI </Directory> #Если нужна поддержка Алисов зеркал домена. Alias /aptitude /usr/share/doc/aptitude/html/en Alias /apt /usr/share/doc/apt-doc <Directory /usr/share> AddHandler fcgid-script .php FCGIWrapper /usr/lib/cgi-bin/php5 .php Options ExecCGI FollowSymlinks Indexes </Directory>
Также для доменов добавьте поддержку:
Пример:
Директивы поправили.<Directory /var/www/вашсайт.com> Options +ExecCGI AllowOverride All Order Allow,Deny allow from all </Directory>
Отключаем модуль mpm_prefork:
sudo a2dismod mpm_prefork
Подключаем модуль mpm_worker.
sudo a2enmod mpm_worker
Если нужно настраиваем worker для проекта и железа индивидуально.
nano /etc/apache2/mods-available/mpm_worker.conf
Можно запускать apache2.
sudo service apache2 start
Внимание, если Вы использовали модули для php5 такие как memcache, Вам нужно их пере-подключить для FASTCGI
Добавьте в конец документа:/etc/php5/cgi/php.ini
extension=memcache.so
Если вы получаете ошибку 500 Internal Service Error при загрузке картинок формата jpg, png, gif и т.д
Не забудьте зайти в
И добавьте ограничение на загрузку:nano /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c> FcgidConnectTimeout 20 #Размер в байтах данное значение равно 10 мегабайтам. MaxRequestLen 10000000 ...
Статья "Apache Worker" содержит 0 комментариев