web-dev-qa-db-fra.com

Comment sélectionner PHP versions 5 et 7 par hôte virtuel dans Apache 2.4 sur Debian?

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>
21
Z0q

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!

35
Elvis Plesky