Установка из исходников и настройка php-cgi (5.3.29) с Apache

#0. Синопсис

Так уж получилось, что клиенту для сайта потребовалась более новая версия php, не ниже 5.3.3. Сервер, на котором располагался клиент, имеет на борту php 5.2.8, в виде модуля Apache, под управлением панели Plesk 9.5.4. В новых версия Plesk Parallels Panel (> 11v) для переключения виртуального хоста между разными версиями php есть решения «из коробки». На текущей же версии панели хостинга коробочного решения не было, нужно было что-то придумать, кроме как переносить сайт на новый сервер, т.к. это затруднительно, ведь у этого сайта было множество поддоменов в этой же учётной записи). Было принято решение: собрать из исходников отдельный индивидуальный инстанс php требуемой версии и подцепить его к apache как cgi. Тем самым клиент не только получил требуемую версию php, но и не лишился выполнения .htaccess через mod_rewrite (apache). Как это было.

#1. Установка и настройка php из исходного кода

Сборка осуществляется из-под пользователя-владельца виртуального хоста, для примера: сайт example.com, пользователь exampleus, группа examplegr. Создаём директорию - куда будем устанавливать файлы нового php-интерпретатора. Скачиваем исходный код php 5.3.29 из «музея» php в отдельную приватную директорию, разархивируем архив.

> mkdir -p /usr/local/www/vhosts/example.com/private/php
> cd /usr/local/www/vhosts/example.com/private
> wget http://museum.php.net/php5/php-5.3.29.tar.bz2
> tar -xjvf php-5.3.29.tar.bz2
> cd php-5.3.29/

Исходный код есть, теперь нужно его настроить для компиляции и установки. Как посмотреть все доступные опции сборки:

> ./configure --help | less

Изучаем конфиг, сравниваем с требованиями и создаём команду для сборки, у меня получилось следующее (основной префикс /usr/local/www/vhosts/example.com/private/php - директория, куда будут установлены бинарные файлы, библиотеки и маны):

> ./configure --prefix=/usr/local/www/vhosts/example.com/private/php --with-mysql --with-mysqli --with-layout=GNU --enable-ftp --with-config-file-scan-dir=/usr/local/www/vhosts/example.com/private/php --enable-libxml --with-pcre-regex=yes --with-regex=php --with-gdbm --with-ndbm --with-iconv --with-gd --enable-gd-native-ttf --with-jpeg-dir=/usr/local/lib --with-png-dir --with-freetype-dir --with-zlib-dir --disable-posix --enable-inline-optimization --without-pear --disable-debug --with-libdir=lib64 --enable-zend-multibyte --enable-mbstring --enable-bcmath --with-bz2 --enable-calendar --with-curl --with-gettext --with-mcrypt --enable-shared --enable-exif --with-gmp --with-imap --with-openssl --with-pdo-mysql --with-xsl --enable-zip --with-imap-ssl

Внимательно следим за процессом конфигурации, в случае ошибок внимательно изучаем config.log, формируемый в процессе configure. После настройки сборки - запускаем компиляцию!

> make install clean

Теперь копируем бинарник в cgi-bin, откуда он будет вызываться как CGI и выставляем правильные права и пользователя:группу.

> cp /usr/local/www/vhosts/example.com/private/php/bin/php-cgi /usr/local/www/vhosts/example.com/cgi-bin/
> chmod 755 /usr/local/www/vhosts/example.com/cgi-bin/php-cgi
> chown exampleus:examplegr /usr/local/www/vhosts/example.com/cgi-bin/php-cgi

И копируем серверный php.ini для php-cgi, обязательно в папку, где сидит бинарник. Если серверный php и вновь собранный php разных версий (5.2 и 5.3), как в данном случае, конфигурационный файл php.ini следует скопировать из исходников php-5.3.29, из которых мы собирали бинарные файлы новой версии.

> cp /usr/local/etc/php.ini /usr/local/www/vhosts/example.com/cgi-bin/ # Серверный php.ini
> cp /usr/local/www/vhosts/example.com/private/php-5.3.29/php.ini-production /usr/local/www/vhosts/example.com/cgi-bin/php.ini # Из исходников

После завершения сборки и установки - проверим, собрался ли php-cgi со всеми теми параметрами, которые нам требуются.

> cd /usr/local/www/vhosts/example.com/cgi-bin/
> ./php-cgi -m

В настройки виртуального хоста (httpd.conf) или в .htaccess добавляем инструкции для обработки php-файлов нашим вновь собранным php-cgi. Ниже - два варианта как это можно указать, оба рабочих.

Первый вариант.

AddType application/x-httpd-phpcgi .php
Action application/x-httpd-phpcgi /cgi-bin/php-cgi

Второй вариант.

AddHandler php-script .php
Action php-script /cgi-bin/php-cgi

В обоих вариантах бинарник располагается в /cgi-bin/, поэтому для apache нужно создать алиас /cgi-bin/, указывающий на абсолютный путь к директории с php-cgi.

ScriptAlias  /cgi-bin/ /usr/local/www/vhosts/example.com/cgi-bin/ # For httpd

Через файлик .htaccess изменения подхватываются на лету, но изменения вносились также в конфигурационный файл httpd.conf, поэтому требуется перезапуск web-сервера.

# /usr/local/etc/rc.d/apache2 restart

Проверяем, работает ли наш php как cgi (через браузер) и удаляем исходный код php.

> rm -R /usr/local/www/vhosts/example.com/private/php-5.3.29*

Done!

apache/ustanovka_i_nastrojka_php-cgi_5.3.29.txt · Последние изменения: 2015/03/11 18:54 — vav
Наверх
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0