Несколько версий php на одном apache (httpd) на CentOS, RHEL через FastCGI средствами phpfarm
Нашел простой, но удобный способ запустить несколько версий php на одном сервере apache на CentOS и RHEL без suphp. Тестировалось на CentOS 6.5 и CentOS 7.
Ключевые слова: Centos 6.5 FastCGI Apache MySQL PHPFarm Multiple PHP’s
Шаг 1.
Первым делом установим набор необходимых пакетов для сборки PHP и другие вспомогательные утилиты:
1 | yum install gcc libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel freetype-devel icu libicu-devel gcc-c++ postgresql-devel aspell-devel git -y |
Для упрощения установки и сборки разных версий PHP, будем использовать утилиту PHPFarm, которая доступна на GitHub. Установим:
1 2 3 4 | cd /opt/ git clone https://github.com/cweiske/phpfarm.git phpfarm cd phpfarm/src/ cd /opt/phpfarm/src/ |
PHPFarm поддерживает возможность настройки параметров компиляции, актуальная документация находится по адресу https://github.com/cweiske/phpfarm
Для каждой версии необходимой версии PHP запустим следующие команды:
1 2 3 | ./compile.sh 5.4.36 ./compile.sh 5.5.20 ./compile.sh 5.6.4 |
Выбрал последние версии, заявленные на сайте php.net.
Шаг 2.
Далее необходимо добавить пути к phpfarm в профайлы пользователей, для этого у пользователей добавляем в ~/.bashrc (либо в общий файл настроек для всех пользователей сразу в /etc/bashrc) в самый конец следующую строку
1 | PATH="/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin:$PATH" |
После этого вводим следующую команду, чтобы добавить новые пути без перезахода в терминал:
1 | export PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin" |
Проверяем возможность выбора версии php, должны увидеть такое сообщение после ввода команды:
1 2 3 4 5 | [root@localhost ~]# switch-phpfarm 5.6.4 Setting active PHP version to 5.6.4 PHP 5.6.2 (cli) (built: Dec 30 2014 12:18:02) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies |
Если увидим ошибку, что команда switch-phpfarm не найдена, то значит ошиблись во внесении путей в переменную PATH. Если ошибка по самому php, то либо указана неверная версия php, либо проблема с установкой php или phpfarm.
Далее добавим rpmforge репозиторий (для разных версий ОС своя RPM, смотрим тут http://repoforge.org/use/):
1 2 3 | ## RHEL/CentOS 6 64 Bit OS ## wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm |
Устанавливаем необходимые пакеты (на Apache выше версии 2.2 нужно использовать вместо mod_fastcgi — mod_proxy_fcgi, встроенный в вебсервер по умолчанию):
1 | yum install php php-cli mod_fastcgi |
В document_root директории веб сервера (/var/www) создаем скрипты обработчики для php разных версий:
1 2 | cd /var/www mkdir cgi-bin |
Для каждой версии php необходимо создать свой скрипт обработчик:
1 | vi /var/www/cgi-bin/php.fastcgi.5.6.4 |
со следующим содержимым:
1 2 3 4 5 6 7 8 | #!/bin/bash PHPRC="/opt/phpfarm/inst/php-5.6.4/lib/php.ini" PHP_FCGI_CHILDREN=4 PHP_FCGI_MAX_REQUESTS=1000 export PHPRC export PHP_FCGI_CHILDREN export PHP_FCGI_MAX_REQUESTS exec /opt/phpfarm/inst/bin/php-cgi-5.6.4 |
Как видим, необходимо указать путь к обработчику php нужной версии (/opt/phpfarm/inst/bin/php-cgi-5.6.4) и к конфигурационному файлу (/opt/phpfarm/inst/php-5.6.4/lib/php.ini)
И так для каждой версии PHP.
Далее необходимо файлы сделать исполняемыми и поменять владельца/группу для каждого обработчика:
1 2 | chown apache:apache /var/www/cgi-bin/php.fastcgi.5.6.4 chmod +x /var/www/cgi-bin/php.fastcgi.5.6.4 |
Далее для тестов создадим виртуальный хост test.com (/etc/httpd/conf.d/test.com.conf):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <VirtualHost *:80> ServerName test.com DocumentRoot /var/www/html/test.com ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/html/test.com"> Options Indexes ExecCGI FollowSymLinks AddHandler php-cgi .php Action php-cgi /cgi-bin/php.fastcgi.5.6.4 AllowOverride All Order allow,deny Allow from All <FilesMatch "\.php$"> Options Indexes FollowSymLinks Includes ExecCGI SetHandler php-cgi </FilesMatch> </Directory> </VirtualHost> |
Две важных строки, в которых создаем алиас директории с нашими обработчиками:
1 | ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" |
И указываем конкретный обработчик php для данного виртуального хоста:
1 | Action php5-fastcgi /cgi-bin/php.fastcgi.5.6.4 |
Перезапустим apache service httpd restart и посмотрим на результат:
Комментарии к Несколько версий php на одном apache (httpd) на CentOS, RHEL через FastCGI средствами phpfarm (2)
Дмитрий
Не работает с поддоменом , на котором должна работать другая версия php.
Delfi Post author
С точки зрения настройки — разницы нет между поддоменом и доменом.
Для поддомена, для рутовой директории нужно так же прописать
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php.fastcgi.5.6.4
с нужной версией php и должно работать.
Без конкретики ничего не подсказать, нужны подробности.