Serait-il possible d’exécuter PHP 7 et PHP 5 simultanément dans Apache 2.4 sur Debian 9?? Je voudrais pouvoir sélectionner PHP version que je souhaite utiliser par virtualhost. Je pense que cela serait utile étant donné que certains de mes sites Web utilisent toujours des fonctionnalités obsolètes PHP. Cela me permet d'effectuer des mises à niveau par site. Comment puis-je obtenir quelque chose comme ça?
Par exemple
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mywebsite.com
DocumentRoot /var/www/mywebsite.com
# UsePHP 7
</virtualHost>
Et
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mywebsite2.com
DocumentRoot /var/www/mywebsite2.com
# UsePHP 5
</virtualHost>
Commençons par le début. Je suppose que vous préféreriez utiliser php-fpm au lieu du module Apache.
Installez d'abord Apache:
Sudo apt-get update
Sudo apt-get install Apache2
Ensuite, installez plusieurs PHP:
Debian 9:
Installer 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
Installer PHP 5:
Sudo apt-get install php5.6-cli php5.6-fpm
Debian 8:
Installer PHP 5:
Sudo apt-get install php5 php5-fpm php-pear libapache2-mod-fastcgi
Configurez les référentiels:
Modifier /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
Installer PHP 7:
Sudo apt-get install php7.0 php7.0-fpm
Ensuite, passez 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
Changer le contenu de /etc/Apache2/mods-enabled/fastcgi.conf
à la suivante:
<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>
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 des utilisateurs système pour ces sites Web:
Sudo useradd example --home-dir /var/www/example.com
Sudo useradd test --home-dir /var/www/test.com
Configurer 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
<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>
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
<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>
Créer des configurations de piscine (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!