change - ¿Cómo seleccionar PHP versión 5 y 7 por virtualhost en Apache 2.4 en Debian?
change php version htaccess wordpress (2)
Parece que esto es posible, siguiendo la sorprendente respuesta de Elvis.
Pero preferiría usar dos servidores virtuales con un host virtual cada uno, en lugar de dos hosts virtuales en un servidor. Eso sería mucho más fácil de configurar.
¿Sería posible ejecutar PHP 7 y PHP 5 simultáneamente en Apache 2.4 en Debian 9? Me gustaría poder seleccionar la versión de PHP que deseo usar por virtualhost. Creo que esto sería útil teniendo en cuenta que algunos de mis sitios web todavía utilizan funciones PHP en desuso. Esto me permite realizar actualizaciones por sitio. ¿Cómo logro algo como esto?
Por ejemplo
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mywebsite.com
DocumentRoot /var/www/mywebsite.com
# UsePHP 7
</virtualHost>
Y
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mywebsite2.com
DocumentRoot /var/www/mywebsite2.com
# UsePHP 5
</virtualHost>
Vamos a empezar desde el principio. Supongo que preferiría usar php-fpm en lugar del módulo Apache.
Primero instale apache:
sudo apt-get update
sudo apt-get install apache2
A continuación instale múltiples PHP:
Debian 9:
Instala PHP 7:
sudo apt-get install php7.0-cli php7.0-fpm php-pear libapache2-mod-fastcgi
Configurar repositorios:
sudo apt-get install apt-transport-https
sudo curl https://packages.sury.org/php/apt.gpg | apt-key add -
sudo echo ''deb https://packages.sury.org/php/ stretch main'' > /etc/apt/sources.list.d/deb.sury.org.list
sudo apt-get update
Instala PHP 5:
sudo apt-get install php5.6-cli php5.6-fpm
Debian 8:
Instala PHP 5:
sudo apt-get install php5 php5-fpm php-pear libapache2-mod-fastcgi
Configurar repositorios:
Edite /etc/apt/sources.list
y agregue las siguientes líneas al final del archivo:
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
Instalar la llave GPG:
wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg
sudo apt-get update
Instala PHP 7:
sudo apt-get install php7.0 php7.0-fpm
Siguiente cambio de Prefork y habilitar los módulos necesarios:
Para Debian 8:
a2dismod php5 mpm_prefork
Para Debian 9:
a2dismod php7 mpm_prefork
Siguiente para ambos:
a2enmod actions fastcgi alias proxy_fcgi mpm_worker
systemctl restart apache2
Cambie el contenido de /etc/apache2/mods-enabled/fastcgi.conf
al siguiente:
<IfModule !mod_fastcgi.c>
AddHandler fcgid-script fcg fcgi fpl
</IfModule>
<IfModule mod_fastcgi.c>
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Ahora crea carpetas raíz de documentos para sitios web:
mkdir -p /var/www/example.com/public_html
mkdir -p /var/www/test.com/public_html
Agregue usuarios de sys para estos sitios web:
sudo useradd example --home-dir /var/www/example.com
sudo useradd test --home-dir /var/www/test.com
Configurar la propiedad:
sudo chown -R example.example /var/www/example.com
sudo chown -R test.test /var/www/test.com
Por ejemplo, el sitio web example.com
utilizará PHP 5 y el sitio web test.com
utilizará PHP 7.
Crear archivos de configuración para sitios web:
Sitio web en PHP 5:
touch /etc/apache2/sites-available/example.com.conf
ln -s /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-enabled/example.com.conf
cat /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<IfModule mod_fastcgi.c>
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi-example.com
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-example.com -socket /var/run/php5-fpm-example.com.sock -pass-header Authorization
</IfModule>
</VirtualHost>
Sitio web en PHP 7:
touch /etc/apache2/sites-available/test.com.conf
ln -s /etc/apache2/sites-available/test.com.conf /etc/apache2/sites-enabled/test.com.conf
cat /etc/apache2/sites-available/test.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi-test.com
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-test.com -socket /var/run/php/php7.0-fpm-test.com.sock -pass-header Authorization
</IfModule>
</VirtualHost>
Crear configuraciones de piscina (usé lo siguiente):
Sitio web en PHP 5:
cat /etc/php5/fpm/pool.d/example.com.conf
[example.com]
user = example
group = example
listen = /var/run/php5-fpm-example.com.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
Sitio web en PHP 7:
cat /etc/php/7.0/fpm/pool.d/test.com.conf
[test.com]
user = test
group = test
listen = /var/run/php/php7.0-fpm-test.com.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
Reinicie los servicios de apache y php-fpm:
sudo systemctl restart apache2 php5-fpm php7.0-fpm
¡Disfrutar!