2017-07-11 1 views
12

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 la version de PHP que je souhaite utiliser par virtualhost. Je crois que cela serait utile étant donné que certains de mes sites utilisent encore des fonctionnalités PHP obsolètes. Cela me permet d'effectuer des mises à niveau par site. Comment puis-je réaliser quelque chose comme ça?Comment sélectionner PHP version 5 et 7 par virtualhost dans Apache 2.4 sur Debian?

Par exemple

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName mywebsite.com 
    DocumentRoot /var/www/mywebsite.com 

    # UsePHP 7 
</virtualHost> 

Et

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName mywebsite2.com 
    DocumentRoot /var/www/mywebsite2.com 

    # UsePHP 5 
</virtualHost> 
+0

Je pense que c'est possible, mais seulement si vous utilisez FastCGI – RiggsFolly

+0

http://gggeek.altervista.org/2007/07/21/running-multiple-php-versions-on-a-single-apache-install/Cela peut vous aider. –

+0

@GeorgeJPadayatti: Ceci est pour un environnement Windows – Z0q

Répondre

17

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

d'abord installer apache:

sudo apt-get update 
sudo apt-get install apache2 

Suivant installer plusieurs PHP:

Debian 9:
installer PHP 7:

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

Configurer les dépôts:

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 

Configurer les dépôts:
Modifier /etc/apt/sources.list et ajouter les lignes suivantes à la fin du fichier :

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

Installation de clés 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 

commutateur suivant de prefork et permettent 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 

Modifier 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> 

maintenant créer un document dossiers racine pour les sites web:

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

Ajouter des utilisateurs sys ces sites:

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 example.com utilisera PHP 5 et le site Web test.com utilisera PHP 7.

Créer des fichiers de configuration pour les sites web:
Site 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 [email protected] 
     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 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 [email protected] 
     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 configs piscine (j'ai utilisé ce qui suit):
Site 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 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 apache et services php-FPM:

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

Amusez-vous!

+0

Merci beaucoup pour l'explication détaillée! Je vais l'essayer. J'ai une question. Quelle est la différence entre PHP-FPM et PHP régulier? – Z0q

+0

Vérifiez l'explication à https://serverfault.com/questions/645755/differences-and-dis-advanages-between-fast-cgi-cgi-mod-php-suphp-php-fpm –

+0

Par ailleurs. Vous pouvez obtenir la même chose avec l'aide du panneau de contrôle d'hébergement comme Plesk. Il va créer toute la configuration pour vous =) –

-1

Il semble que ce soit possible, en réponse à 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.