Apache + php5 + php4 (FreeBSD)

в 11:11, , рубрики: Apache, freebsd, php, php5, системное администрирование, хостинг, метки: , , ,

В очень редких случаях, но иногда случаются так, что в рамках одного и того же веб-сайта нам необходимо иметь 2 разные версии php.
С одним из таких случаев пришлось столкнутся мне — на веб-сайте крутится древний [как гумус динозавтра] wordpress (требование скрипта- php4). В рамках текущего домена внезапно потребовалось установить скрипт, у которого минимальные требования — php пятой ветки.

Дано

  • Проект с приличным трафиком. Краткосрочное падение трафика (даже на 10 секунд) — недопустимо
  • Apache с вкомпиленым в него php4
  • Варится все на FreeBSD
Нужно

  • Без особой крови падения трафика заставить работать php5 в отдельном каталоге

Возможные решения

Вариант А

  1. Смещаем apache+php4 на backend
  2. Поднимаем еще один apache, вкомпиливаем в него php5, вешаем на другой порт
  3. Фронтендом устанавливаем nginx.
  4. В vhost'e для домена определяем специальный location, который будем проксировать на apache+php5, корневой location проксируем на apache+php4
Вариант Б

  1. Поднимаем еще один apache, вкомпиливаем в него php5, вешаем на другой порт
  2. Вкомпиливаем в основной apache mod_proxy
  3. Проксируем нужный нам каталог на apache+php5
Вариант В

  1. Компилим php5 как cgi
  2. В .htaccess'e нужного нам каталога даем особые указания по обработке php-скриптов

Клиент наотрез отказывается выносить проект на nginx, а также проводить какие-либо манипуляции с текущим софтом на сервере. Я принял решение реализовать план «В», как вариант с наименьшим количеством крови (т.е. с полным ее отсутствием)

Собираем php с опциями:

./configure 
 --enable-force-cgi-redirect 
 --prefix=/usr/local/php5-cgi 
 --exec-prefix=/usr/local/php5-cgi 
 --program-suffix=5 
 --enable-discard-path 
 ... далее модули по вкусу

make && make install

После сборки:

cp /usr/local/php5-cgi/bin/php-cgi5 /{путь_к_корню_домена}/cgi-bin/
chown владелец_домена:группа_владельца_домена /{путь_к_корню_домена}/cgi-bin/php-cgi5
cp php-ini.dist /usr/local/php5-cgi/lib/php.ini
# а также проводим редактирование файла настроек php.ini под свои нужды.

В нужном нам каталоге правим .htaccess:

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

После чего можем ставить скрипт, требующий php5, в отдельный каталог

PS: Это мой первый пост на Хабре. Если что не так — прошу аргументировано бросить в меня профилактическим помидором

Автор: Radriga

Поделиться

* - обязательные к заполнению поля