PHP5 & PHP4 на одном apache
Как-то нужно было сделать хостинг с поддержкой PHP5 и PHP4 одновременно на одном сервере.
Решений данной задачи как минимум 2.
Установка и запуск одной из версий PHP посредством модуля apache, другой посредством CGI (или обе версии как CGI) + suPHP.
Запуск 2-х экземпляров web-сервера (в данном случае apache). Не знаю по какой причине, но это едва ли не самый популярный способ, хотя, имхо, и наименее гибкий и не менее геморойный.
Способ 1. Обе версии посредством CGI
Все проделывалось на Ubuntu 10.04 LTS/10.10 (то же справедливо и для debian).
Если apache и php5 уже установлен:
test# a2dismod php5 test# apt-get install php5-cgi libapache2-mod-suphp
Если apache и php5 не установлены:
test# apt-get install apache2 php5-cgi libapache2-mod-suphp
Скачиваем и устанавливаем php4:
test# cd /usr/src test# wget _http://uk.php.net/distributions/php-4.4.9.tar.gz test# tar -xvzf php-4.4.9.tar.gz test# apt-get install autoconf automake bison flex libtool re2c test# cd php-4.4.9 test# ./configure --prefix=/usr/local/php4 --enable-cgi=yes ...
(экстеншены по вкусу, какие нужны. Это минимальный набор. Список всех опций
./configure --help)
test# make && make install
Приводим файл /etc/suphp/suphp.conf примерно к такому виду:
[global] logfile=/var/log/suphp/suphp.log loglevel=info webserver_user=www-data ;For RHEL/CENTOS webserver_user=apache docroot=/ ;chroot=/mychroot allow_file_group_writeable=true allow_file_others_writeable=false allow_directory_group_writeable=true allow_directory_others_writeable=false check_vhost_docroot=false errors_to_browser=true env_path=/bin:/usr/bin umask=0077 min_uid=33 min_gid=33 [handlers] ;Handler for php-scripts x-httpd-php5="php:/usr/lib/cgi-bin/php5" x-httpd-php4="php:/usr/local/php4/bin/php" ;Handler for CGI-scripts x-suphp-cgi="execute:!self"
Редактируем (комментируя все строки в файле) или удаляем файл:
/etc/apache2/mods-available/suphp.conf
Далее при создании виртальных хостов пишем:
для PHP5:
<VirtualHost 1.2.3.4:80> DocumentRoot "/home/www/example.com" ServerName "example.com" <IfModule mod_suphp.c> suPHP_Engine on AddHandler x-httpd-php4 .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php4 </IfModule> </VirtualHost>
<VirtualHost 1.2.3.4:80> DocumentRoot "/home/www/example.com" ServerName "example.com" <IfModule mod_suphp.c> suPHP_Engine on AddHandler x-httpd-php4 .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php4 </IfModule> </VirtualHost>
Способ 2. PHP5 посредством CGI, PHP4 посредством модуля
Все проделывалось на Ubuntu 10.04 LTS/10.10 (то же справедливо и для debian).
В качестве модуля к apache выбрал php4, т.к. это немного сложнее сделать.
Если apache и php5 уже установлен:
test# a2dismod php5 test# apt-get install php5-cgi libapache2-mod-suphp
Если apache и php не установлены:
test# apt-get install apache2 php5-cgi libapache2-mod-suphp
Далее качаем и устанавливаем php4 (для того чтобы скомпилировать модуль php4 для apache нужен пакет apxs2, который идет в составе пакета apache-threaded-dev):
test# wget _http://uk.php.net/distributions/php-4.4.9.tar.gz test# tar -xvzf php-4.4.9.tar.gz test# apt-get install autoconf automake bison flex libtool re2c test# cd php-4.4.9 test# apt-get install apache2-threaded-dev test# ./configure --prefix=/usr/local/php4 --with-apxs2=/usr/bin/apxs2 --enable-cgi=yes --with-mysql=/usr/ ...
(экстеншены по вкусу, какие нужны. Это минимальный набор. Список всех опций
./configure --help)
test# make test# make install
Приводим файл /etc/suphp/suphp.conf примерно к такому виду:
[global] logfile=/var/log/suphp/suphp.log loglevel=info webserver_user=www-data ;For RHEL/CENTOS webserver_user=apache docroot=/ ;Path to chroot() to before executing script ;chroot=/mychroot allow_file_group_writeable=true allow_file_others_writeable=false allow_directory_group_writeable=true allow_directory_others_writeable=false check_vhost_docroot=false errors_to_browser=true env_path=/bin:/usr/bin umask=0077 min_uid=33 min_gid=33 [handlers] ;Handler for php-scripts x-httpd-php5="php:/usr/lib/cgi-bin/php5" ;Handler for CGI-scripts x-suphp-cgi="execute:!self"
Редактируем (комментируя все строки в файле) или удаляем файл:
/etc/apache2/mods-available/suphp.conf
Далее при создании виртальных хостов пишем:
для PHP5:
<VirtualHost 1.2.3.4:80> DocumentRoot "/home/www/example.com" ServerName "example.com" <IfModule mod_suphp.c> suPHP_Engine on AddHandler x-httpd-php5 .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php5 </IfModule> </VirtualHost>
<VirtualHost 1.2.3.4:80> DocumentRoot "/home/www/example.com" ServerName "example.com" <IfModule mod_php4.c> AddType x-httpd-php .php </IfModule> </VirtualHost>