Записи с меткой ‘mpm-itk’
Apache mpm-itk — пересборка php
Если вы читаете эту статью, то уже наверное столкнулись с проблемой, что после перекомпиляции php с работающим mpm-itk получаем невеселую картину: ioncube и zend optimizer не хотят подгружаться и соответственно не работают. Я долго искал решение данной проблемы, задавал вопрос на форуме Searchengines и других специализированных форумах, но местные гуру порекомендовали исправить руки. И найдя в чем загвоздка, я сомневаюсь в их компетенции. Итак, что же происходит, почему ioncube и zend не работают? Причина в том, что при компиляции php, конфигуратор решает, что apr и apache работает в режиме “thread safety”, ну и соответственно добавляет везде где можно ключи чтобы и php был собран в этом режиме. Итак, чтобы отучить конфигуратор от этих темных мыслей применяем перед конфигурацией следующий patch:
— php-5.2.17/configure.orig 2011-01-09 11:32:18.000000000 +0200
+++ php-5.2.17/configure 2011-01-09 11:35:06.000000000 +0200
@@ -6380,7 +6380,7 @@
;;
esac
- if test «$APXS_MPM» != «prefork»; then
+ if test «$APXS_MPM» != «itk» -a «$APXS_MPM» != «prefork»; then
enable_maintainer_zts=yes
if test «$pthreads_working» != «yes»; then
@@ -7228,7 +7228,7 @@
;;
esac
- if test «$APXS_MPM» != «prefork»; then
+ if test «$APXS_MPM» != «itk» -a «$APXS_MPM» != «prefork»; then
enable_maintainer_zts=yes
if test «$pthreads_working» != «yes»; then
— php-5.2.17/sapi/apache2handler/config.m4.orig 2007-07-12 02:20:37.000000000 +0300
+++ php-5.2.17/sapi/apache2handler/config.m4 2011-01-09 11:45:40.000000000 +0200
@@ -117,7 +117,7 @@
;;
esac
- if test «$APXS_MPM» != «prefork»; then
+ if test «$APXS_MPM» != «itk» -a «$APXS_MPM» != «prefork»; then
PHP_BUILD_THREAD_SAFE
fi
AC_MSG_RESULT(yes)
Версию patch-а текстовым файлом можно скачать тут: php-mpm-itk.patch
DirectAdmin сборка Apache с mpm-itk
Не будем вдаваться в подробности, что такое MPM и с чем его едят, кому интересно –это сокращение от Multi-Processing Module. mpm-itk базируется на традиционном prefork MPM + добавлены некоторые функции, например возможность ограничения количества соединений на виртуальный хост, задание имени пользователя и группы от которой будет работать Apache на определенном виртуальном хосте и последнее свойство – задание приоритета работы в системе для виртуального хоста.
Итак, зачем нам нужно устанавливать этот MPM? Например:
1) для того чтобы пользователи постоянно не жаловались, что они не могут удалить те или иные файлы созданные через веб интерфейс, так как виртуальный хост будет теперь работать от имени пользователя в системе
2) исчезает головная боль у системного администратора с квотированием места для веб сайтов. Теперь файлы закачанные на сервер через веб интерфейс имеют владельца и группу пользователя, соответственно попадают в подсчет квоты.
3) приоритет процессов в системе. Очень удобно “душить” очень сильно грузящие сервер сайты
4) задание количества соединений на виртуальный хост – уходит сюрприз когда один сайт съедает максимальное количество соединений выставленных для всего сервера.
5) так как виртуальный сервер (домен пользователя) работает с правами пользователя, то возможно установить ограничение на процессорное время в системе.
Спросите почему не использовать тот же suphp? Причины: 1) у suphp есть куча ситуаций когда php код написанный под mod_php не работает. 2) suphp не работает с php кэшерами (eaccelerator, xcache и т.д.) 3) большая нагрузка на сервер
Итак, с плюсами разобрались, начнем установку. Первое это обновляем apache и php в DirectAdmin до последней стабильной версии. Далее копируем архив apache с /usr/local/directadmin/custombuild , например в /usr/local/src, разархивируем его. Заходим на сайт разработчика mpm-itk: http://mpm-itk.sesse.net/ находим там diff файл и закачиваем его в директорию распакованного архива apache.
Запускаем patch, который внесет изменения в код:
#patch –p1 <apache2.2-mpm-itk-20090414-00.patch
Смотрим вывод и если ошибок нету то запускаем buildconf, он должен пройти без ошибок, если ошибки есть то смотрим что не хватает, например expat или autoconf, их нужно будет установить и повторить запуск buildconf. После этого архивируем директорию пропатченного apache:
#tar czf httpd-2.2.16.tar.gz httpd-2.2.16/
И копируем архив в директорию custombuild
#cp –f httpd-2.2.16.tar.gz /usr/local/directadmin/custombuild/
Переходим в директорию custombuild, снимаем md5 сумму с архива httpd-2.2.16.tar.gz и заменяем ею текущую md5 сумму в versions.txt
Приступаем к редактированию новых темплейтов для виртуальных хостов:
1) в директории /usr/local/directadmin/data/templates создаем поддиректорию custom и копируем в нее все virtual_host* конфигурационные файлы.
2) редактируем эти конфигурационные файлы, находи в них строку SuexecUserGroup и заменяем ее на AssignUserID. Если планируете использовать директивы MaxClientsVHost и NiceValue, то добавляете их.
Теперь переходим к процессу установки нового Apache. Создаем в директории /usr/local/directadmin/custombuild директорию custom. Копируем в нее с директории configure директорию ap2. Редактируем скопированный configure.apache и добавляем в конец ключ «—with-mpm=itk», приступаем к сборке:
#/usr/local/directadmin/custombuild> ./build apache
Все, Apache пересобран, конфигурационные файлы изменены. Если у вас до этого были уже созданы пользователи и домены, то не забываем сбросить владельцев на файлах и директориях, и добавить секюрности:
# chown -R user1:group1 public_html # cd public_html # find . -type d -exec chmod 750 {} \; # find . -type f -exec chmod 640 {} \;
Далее проверяем свою работу, создаем в директории любого домена php скрипт следующего содержания:
<?php system("id"); ?>
Смотрим результат через веб, при работе обычного Apache будет такой результат:
uid=1004(apache) gid=1004(apache) groups=1004(apache)
При правильной работе Apache с mpm-itk результат будет такой:
uid=1500(user1) gid=1500(group1) groups=1500(group1)
Удачи