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

Записи с меткой ‘php’

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)

Удачи

Cpanel: suphp и персональный php.ini

Если вы настроили обработку php файлов на вашем сервере через suphp, то вы больше не сможете изменять переменные php через переменные php_value и php_flag в вашем htaccess файле. Для этого вам теперь нужно использовать свой php.ini файл или общий php.ini файл сервера. Так как общий php.ini файл изменять не рекомендуется, так как все внесенные вами изменения в этот файл коснутся ВСЕХ сайтов на вашем сервере, то у вас остается только один вариант – собственный php.ini файл. Итак, вы создали php.ini файл в каталоге вашего сайта, добавили в него свои собственные переменные, но phpinfo показывает что ваши изменения не вступили в силу. В чем же проблема? Если вы внимательно посмотрите phpinfo, то увидите что ваш php.ini файл не обрабатывается.

Итак, чтобы php увидел ваш php.ini файл, вам нужно добавить в htaccess одну строку:

SetEnv PHPRC /home/user

где /home/user – полный путь к каталогу, где находится ваш php.ini файл.

Еще раз проверяем информацию в phpinfo, видим что все подхватилось, радуемся и бежим пить пиво :)

DirectAdmin переходим на php 5.3

Язык php имеет бурное развитие и новые версии выходят довольно часто, поэтому вебмастера стараются держать свои программные продукты в актуальном виде. Не так давно свет увидела новая версия php 5.3. На сегодняшний день вышло уже 2 (два) обновления и версия php имеет номер 5.3.2.

Внимание: на данный момент Zend Optimizer не поддерживает версию php 5.3, поэтому если вы используете Zend на вашем сервере, то вы не должны обновлять php до версии 5.3, так как это приведет к неработоспособности ваших сайтов.

Итак, приступаем к настройке в DirectAdmin. Переходим в каталог: /usr/local/directadmin/custombuild . Забираем последние обновления софта с DirectAdmin: ./build update . Меняем версию php на 5.3 в файле options.conf переменная php5_ver или через интерактивную конфигурацию запустив команду: ./build options

После изменений можно приступать к пересборке php запустив команду: ./build php n