В очень редких случаях, но иногда случаются так, что в рамках одного и того же веб-сайта нам необходимо иметь 2 разные версии php.
С одним из таких случаев пришлось столкнутся мне — на веб-сайте крутится древний [как гумус динозавтра] wordpress (требование скрипта- php4). В рамках текущего домена внезапно потребовалось установить скрипт, у которого минимальные требования — php пятой ветки.
Дано
- Проект с приличным трафиком. Краткосрочное падение трафика (даже на 10 секунд) — недопустимо
- Apache с вкомпиленым в него php4
- Варится все на FreeBSD
Нужно
- Без
особой кровипадения трафика заставить работать php5 в отдельном каталоге
Возможные решения
Вариант А
- Смещаем apache+php4 на backend
- Поднимаем еще один apache, вкомпиливаем в него php5, вешаем на другой порт
- Фронтендом устанавливаем nginx.
- В vhost'e для домена определяем специальный location, который будем проксировать на apache+php5, корневой location проксируем на apache+php4
Вариант Б
- Поднимаем еще один apache, вкомпиливаем в него php5, вешаем на другой порт
- Вкомпиливаем в основной apache mod_proxy
- Проксируем нужный нам каталог на apache+php5
Вариант В
- Компилим php5 как cgi
- В .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