mpm-itk — это MPM (multi-processing модуль) для веб сервера Apache что позволяет запускать каждый VirtualHost с собственным идентификатором пользователя и ID группы.
Я в своей статье «Установка Apache mpm-itk на Unix/Linux» расскажу как можно установить Apache mpm-itk на Unix/Linux, а конкретно для Debian и CentOS и так же можно скомпилировать под любой другой Unix/Linux ОС.
Подготовка к установке.
Если пользователь и группа не существует, мы можете создать их следующим образом:
Установите ID пользователя и идентификатор группы для виртуального хоста (внутри директивы <IfModule itk.c>). Как правило, это пользователь Apache с группой Apache.
Не забудьте установить правильные права! Для полной и безопасной установки, вам нужно 2 пользователя и 1 группа для каждого виртуального хоста.
Если вы хотите установить права рекурсивно, используйте следующие команды:
sh
2 lines
# find /home/itk_admin -type f -exec chmod 640 {} ;
# find /home/itk_admin -type d -exec chmod 750 {} ;
Первая команда будет установить все файлы пользователя с пермишенами — RW и для группы — R, второй будет установить все каталоги для пользователя — RWX и группы — RX.
При использовании PHP с mod_php, не забудьте добавить в:
sh
1 lines
# vim /etc/httpd/conf.d/php.conf
Следующий код:
sh
22 lines
#<IfModule prefork.c>
# LoadModule php5_module modules/libphp5.so
#</IfModule>
#<IfModule worker.c>
# LoadModule php5_module modules/libphp5-zts.so
#</IfModule>
<IfModuleitk.c>
LoadModulephp5_modulemodules/libphp5.so
</IfModule>
# Cause the PHP interpreter to handle files with a .php extension.
AddHandlerphp5-script .php
AddTypetext/html .php
# Add index.php to the list of files that will be served as directory
# indexes.
DirectoryIndexindex.php
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#AddType application/x-httpd-php-source .phps
Переходим к настройке виртуальных хостов и к тестированию. Все это описывается ниже.
Для centOS 7 нужно выполнить следующие шаги.
sh
3 lines
# vim /etc/httpd/conf.modules.d/00-mpm-itk.conf
LoadModulempm_itk_modulemodules/mod_mpm_itk.so
Перезапускаем сервер:
sh
1 lines
# service httpd restart
И проверяем, загружен ли модуль:
sh
1 lines
# apachectl -t -D DUMP_MODULES | grep itk
Установка Apache mpm-itk на Debian/Ubuntu
apache2-mpm-itk доступен в виде пакета Debian, по этому, установить можно с помощью следующей команды:
sh
1 lines
Настройка, немного ниже.
Установка Apache mpm-itk с исходного кода.
mpm-itk должен быть скомпилирован при установке Apache. Он не может быть загружен как модуль.
Прежде всего, загрузить исходный код Apache, а затем загрузить mpm-itk patch для Apache 2.0 или mpm-itk patch для Apache 2.2 или mpm-itk patch для Apache 2.4:
Затем, нужно сконфигурировать исходный код Apache с mpm-itk:
sh
1 lines
$ ./configure--with-mpm=itk
можно собрать DEB или RPM пакет или скомпилировать его следующими командами:
sh
1 lines
Настройка Apache, создание виртуальных хостов.
Для RedHat/CentOS/Fedora
Установите идентификатор пользователя и идентификатор группы, чтобы ваши виртуальные хосты были похожи что-то типа на:
sh
1 lines
# vim·/etc/httpd/conf.d/mpm-itk.conf
и вставляем:
sh
18 lines
#Listen 80
Listen8080
<VirtualHost97.79.237.17:8080>
ServerName97.79.237.17
DocumentRoot/home/itk_admin
AssignUserIditk_adminitk_group
<Directory/>
OptionsFollowSymLinks
AllowOverrideNone
</Directory>
<LocationMatch"^/+$">
Options-Indexes
ErrorDocument403/error/noindex.html
</LocationMatch>
</VirtualHost>
Для Debian/Ubuntu
apache2-mpm-itk — настроем для каждого виртуальный хост, то есть, мы не должны устанавливать какие-либо глобальные параметры и есть только одна директива которую нужно прописать в виртуальный хосте- AssignUserId, которая принимает два параметра, имя пользователя и группу.
В этом примере я буду использовать виртуальный хост Apache для Debian по умолчанию (вы можете найти его в /etc/apache2/sites-available/default) все файлы и папки сайтов лежат в /var/www (если есть другие виртуальные хости, то настройте их по вашему усмотрению), и я хочу, чтобы этот виртуальный хост запускался от пользователя itk_admin и его группы itk_group. Я создал пользователя и группу в самом начале данной статьи.
Затем, открываем конфигурационный файл, виртуальный хост, и добавляем следующие строки, например:
sh
1 lines
# vim /etc/apache2/sites-available/default
И вставляем:
sh
49 lines
NameVirtualHost*
<VirtualHost*>
ServerAdmincaptain@linux-notes.org
·DocumentRoot/home/itk_admin
<Directory/>
OptionsFollowSymLinks
AllowOverrideNone
</Directory>
<Directory/home/itk_admin/>
OptionsIndexesFollowSymLinksMultiViews
AllowOverrideNone
Orderallow,deny
allowfromall
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
RedirectMatch ^/$ /apache2-default/
</Directory>
ScriptAlias/cgi-bin//usr/lib/cgi-bin/
<Directory"/usr/lib/cgi-bin">
AllowOverrideNone
OptionsExecCGI-MultiViews+SymLinksIfOwnerMatch
Orderallow,deny
Allowfromall
</Directory>
ErrorLog/var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevelwarn
CustomLog/var/log/apache2/access.logcombined
ServerSignatureOn
Alias/doc/"/usr/share/doc/"
<Directory"/usr/share/doc/">
OptionsIndexesMultiViewsFollowSymLinks
AllowOverrideNone
Orderdeny,allow
Denyfromall
Allowfrom127.0.0.0/255.0.0.0 ::1/128
</Directory>
<IfModulempm_itk_module>
AssignUserIditk_adminitk_group
</IfModule>
</VirtualHost>
AssignUserId принимает два параметра:
Первым параметром является идентификатор пользователя (user ID), чтобы запустить Apache для конкретного сайта.
Вторым параметром является идентификатор группы (group ID), чтобы запустить Apache для конкретного сайта.
Не забудьте перезапустить Apache после добавления AssignUserId.
Тестирование mpm-itk.
Создаем файл и в нем разместим небольшой код который покажет на очень полезную информацию, для этого выполняем:
Все работает должным образом, если нет. То нужно выяснять почему
Тестирование suPHP vs mpm-itk vs mpm-prefork
1. Для mpm-itk, я использовал утилиту benchmark (ab) и загружал страницу phpinfo() 1,000 раз. Я запускал benchmark 5 раз и средние данные вышли следующими:
mpm-itk: average of 37.01 seconds
mpm-prefork: average of 6.21 seconds
Другие соображения
suexec и suphp несут ограничения для ваших PHP-приложений, но mpm-itk не несет. Потому mpm_itk запускает (выполняет) работу и переключает пользователей в нужное место и позволяет запускать PHP код под модулем mod_php. В результате, этот код может свободно использовать любой правообладатель Apache, для которого не доступны PHP/CGI (поддержка аутентификации HTTP).
2. Еще 1 тест:
prefork: 2.720166 seconds
suphp: 13.621006 seconds
itk: 4.263002 seconds
Эти тесты были получены с использованием «AB» с сервером HTTPD. Они представляют время, которое потребовалось, чтобы загрузить первой странице моего блога 200 раз:
sh
1 lines
# ab -c 1 -n 200 http://www.linux-notes.org/
PreFork является стандартным модулем Apache MPM который работает с mod_php. Это самый быстрый, из изложенных выше, также самый небезопасный.
suPHP решает проблему исполняемых PHP файлов с помощью SUID и работает под CGI, но крайне медленно.
mpm-itk — модуль для Apache, который также предлагает функцию запуска файлов от различных пользователей, но она основана на PreFork и использует mod_php.Производительность — хуже (в 2x медленнее), чем prefork, но гораздо лучше, чем suPHP.
На этом, статья «Установка Apache mpm-itk на Unix/Linux» подошла к завершению.