Установка Apache MPM-ITK на CentOS 5, CentOS 6
Apache MPM-ITK позволяет запускать скрипты, выполняемые вебсервером (например, mod_php, mod_pytjon и т.д.) с правами пользователя-владельца виртуального хоста, а не web-сервера. Чаще всего используется на шаред хостингах. Процесс, работающий от пользователя root, анализирует, какому виртуальному хосту пришел запрос, после чего форкает самого себя с setuid на того пользователя, который указан в настройках данного виртуального хоста.
В начале необходимо подключить репозиторий. Для CentOS 5 пакеты есть в webtatic. В общем, тут есть инструкция как подключить. для CentOS6 - был такой репозиторий "centalt". К сожалению, его владелец, после сбора средств на поддержку проекта, куда-то пропал и не отвечает на предложение сообщества помочь. Правда, пока репозиторий ещё не стал заражённым, появился его клон, сделанный кем-то из добродетелей =). Но... лично у меня пока нет сведений, что он во всех смыслах доверенный. Тем не менее, кому ОЧЕНЬ нужно вот ссылка на копию - repo.x-api.net.
Чтобы добавить этот репозиторий создайте файл /etc/yum.repos.d/x-api.repo со следующим содержимым:
[x-api] name=x-api Packages for Enterprise Linux 6 - $basearch baseurl=http://repo.x-api.net/centos6/$basearch/ enabled=1 gpgcheck=0
P.S. В скором времени (надеюсь), доберусь до создания своей собственной репы, чтобы вот такие "вымирания" не мешали быстро и спокойно работать.
Устанавливаем Apache MPM-ITK или просто обновляем Apache, если он уже есть:
yum install httpd
yum update httpd
Если apache установлен и выполняется, сначала необходимо его остановить!
/etc/init.d/httpd stop
Далее откройте в редакторе /etc/sysconfig/httpd и раскомментируйте строку:
HTTPD=/usr/sbin/httpd.itk
Если мы хотим крутить настройки mpm-itk, нам нужно добавить следующие строчки (если их нет!) в используемый файл конфигурации. Для этого открываем /etc/httpd/conf/httpd.conf и вносим строки:
<IfModule itk.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
Здесь:
- StartServers - устанавливает число дочерних процессов сервера при запуске;
- MinSpareServers - задает минимальное число свободных процессов;
- MaxSpareServers - устанавливает после скольки процессов лишние будут завершаться.;
- ServerLimit - верхний предел установленного количества процессов;
- MaxClients - максимальное количество соединений, которые будут обрабатываться одновременно;
- MaxRequestsPerChild - лимит запросов дочернего процесса. После превышения процесс умирает.
Важно понимать, что нужно быть аккуратным с изменением этим значений. Для большинства сервером не требуется их изменение. Если всё же хотите менять, необходимо четко представлять, что от чего зависит. Описание всех директив есть на официальном сайте apache.
P.S.Если интересно, есть "пример сервера, который обслуживает около 6 миллионов в сутки". Не помню, где нашёл, но автору Спасибо! =)
Timeout 15 KeepAlive Off MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 50 MinSpareServers 20 MaxSpareServers 20 ServerLimit 1000 MaxClients 1000 MaxRequestsPerChild 100 </IfModule>
Продолжим.
В последних версиях apache в разных режимах работы (mpm-prefork mpm-itk, mpm-worker...) подключаются разные библиотеки php. Хорошо бы проверить, что php будет работать с нашим режимом "правильно". Для этого идёт и смотрим файл:
nano /etc/httpd/conf.d/php.conf
Один из вариантов того, что там может быть написано:
<IfModule prefork.c> LoadModule php5_module modules/libphp5.so </IfModule> <IfModule !prefork.c> LoadModule php5_module modules/libphp5-zts.so </IfModule>
Это значит, что если режим не по умолчанию (mpm-prefork), включать php-zts. А этого нам не нужно. Поэтому мы приводим запись к виду:
<IfModule prefork.c> LoadModule php5_module modules/libphp5.so </IfModule> <IfModule itk.c> LoadModule php5_module modules/libphp5.so </IfModule>
Остальные значения нам не интересны.
Запустите Apache:
/etc/init.d/httpd start
После этого apache научится работать от имени пользователя. Проверим, что всё как нужно:
apachectl -t -D DUMP_MODULES | grep mpm Syntax OK mpm_itk_module (static)
Отлично. Теперь нужно добавить запись типа "AssignUserId user group" в настройки виртуального хоста. Например, так:
<VirtualHost *:80> ServerAdmin admin@domain.ru ServerName domain.ru ServerAlias www.domain.ru ErrorLog /var/log/httpd/domain_error.ru CustomLog /var/log/httpd/domain_access.ru DocumentRoot /var/www/domain.ru <Directory /var/www/domain.ru> Options FollowSymLinks AllowOverride All Order allow,deny Allow from All </Directory> AssignUserId user group </VirtualHost>
Не забудьте проверить правильность конфига:
/etc/init.d/httpd configtest
или
httpd.itk -t
P.S.Заметьте! Не httpd -t. Иначе будет ошибка:
Invalid command 'AssignUserID', perhaps misspelled or defined by a module not included in the server configuration<>
и перечитать его, чтобы настройки вступили в силу:
/etc/init.d/httpd graceful
Комментарии
Kalistos
01/12/2015 - 18:48
Постоянная ссылка (Permalink)
А где на этой странице
А где на этой странице установка самого httpd-itk?
erian
01/12/2015 - 18:56
Постоянная ссылка (Permalink)
Ну... собственно прямо ТУТ =)
Ну... собственно прямо ТУТ =)
Дело в том что в репозиториях centalt(репа умерла) и в webtatic httpd собран УЖЕ с itk. Т.е. нужно просто установить apache (а точнее следовать инструкции).
Если что-то всё же идёт не так, всегда можно посмотреть, что есть в других репозиториях:
belyi05
04/13/2015 - 11:18
Постоянная ссылка (Permalink)
правильно я понимаю, что
правильно я понимаю, что после проведенных процедур при вызове htop у процесса httpd владелец должен быть не root, а у каждого виртуального хоста свой? если этого не произошло - что может быть не так?
erian
04/13/2015 - 11:33
Постоянная ссылка (Permalink)
В целом да - верно. Но не
В целом да - верно. Но не забывайте, что процессы от root пользователя всё равно будут! Должны же быть корневые процессы, которые уже дальше "форкают" пользователя. А сам по себе веб-сервер от root'а не работает. Всё равно это пользователя apache или, например, www-data в debian/ubuntu.
Проверить очень просто. Создайте два файла в корне сайта с разными пользователями и правами 700 - сразу увидите кто читает (должен соответствовать AssignUserID), а кто не имеет доступа.
anonymous
04/13/2015 - 15:05
Постоянная ссылка (Permalink)
спасибо за ответ. все
спасибо за ответ. все получилось
Добавить комментарий