Comment sélectionner la version 5 et 7 de PHP par virtualhost dans Apache 2.4 sur Debian?

Serait-il possible de lancer PHP 7 et PHP 5 simultanément dans Apache 2.4 sur Debian 9? Je voudrais pouvoir sélectionner la version de PHP que je souhaite utiliser par virtualhost. Je pense que cela serait utile étant donné que certains de mes sites Web utilisent encore des fonctionnalités PHP obsolètes. Cela me permet d’effectuer des mises à niveau par site. Comment puis-je obtenir quelque chose comme ça?

Par exemple

 ServerAdmin webmaster@localhost ServerName mywebsite.com DocumentRoot /var/www/mywebsite.com # UsePHP 7  

Et

  ServerAdmin webmaster@localhost ServerName mywebsite2.com DocumentRoot /var/www/mywebsite2.com # UsePHP 5  

Commençons par le début. Je suppose que vous préféreriez utiliser php-fpm au lieu du module Apache.

Première installation d’Apache:

 sudo apt-get update sudo apt-get install apache2 

Ensuite, installez plusieurs PHP:

Debian 9:
Installez PHP 7:

 sudo apt-get install php7.0-cli php7.0-fpm php-pear libapache2-mod-fastcgi 

Configurez les référentiels:

 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 

Installez PHP 5:

 sudo apt-get install php5.6-cli php5.6-fpm 

Debian 8:
Installez PHP 5:

 sudo apt-get install php5 php5-fpm php-pear libapache2-mod-fastcgi 

Configurez les référentiels:
Modifiez /etc/apt/sources.list et ajoutez les lignes suivantes à la fin du fichier:

 deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all 

Installer la clé GPG:

 wget https://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg sudo apt-get update 

Installez PHP 7:

 sudo apt-get install php7.0 php7.0-fpm 

Passez ensuite de prefork et activez les modules nécessaires:
Pour Debian 8:

 a2dismod php5 mpm_prefork 

Pour Debian 9:

 a2dismod php7 mpm_prefork 

Suivant pour les deux:

 a2enmod actions fastcgi alias proxy_fcgi mpm_worker systemctl restart apache2 

Changez le contenu de /etc/apache2/mods-enabled/fastcgi.conf pour le suivant:

  AddHandler fcgid-script fcg fcgi fpl    Require all granted   

Créez maintenant des dossiers racine de documents pour les sites Web:

 mkdir -p /var/www/example.com/public_html mkdir -p /var/www/test.com/public_html 

Ajoutez les utilisateurs sys pour ces sites Web:

 sudo useradd example --home-dir /var/www/example.com sudo useradd test --home-dir /var/www/test.com 

Configurez la propriété:

 sudo chown -R example.example /var/www/example.com sudo chown -R test.test /var/www/test.com 

Par exemple, le site Web example.com utilisera PHP 5 et le site Web test.com utilisera PHP 7.

Créez des fichiers de configuration pour les sites Web:
Site Web sur 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  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  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   

Site Web sur 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  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  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   

Créez des configurations de pool (j’ai utilisé ce qui suit):
Site Web sur 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 = / 

Site Web sur 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 = / 

Redémarrez les services apache et php-fpm:

 sudo systemctl restart apache2 php5-fpm php7.0-fpm 

Prendre plaisir!

Il semble que cela soit possible, suite à la réponse étonnante d’Elvis.

Mais je préférerais utiliser deux serveurs virtuels avec un hôte virtuel chacun, plutôt que deux hôtes virtuels sur un serveur. Ce serait tellement plus facile à configurer.