Февраль 2012
Пн Вт Ср Чт Пт Сб Вс
« Июл    
 12345
6789101112
13141516171819
20212223242526
272829  
Рубрики

Записи с меткой ‘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)

Удачи