Utilisation de plusieurs versions de PHP avec Apache sur CentOS / RedHat

Plusieurs versions de PHP avec Apache sur CentOS 7 RHEL Redhat

Pour gérer de nombreux domaines en une seule instance, le serveur web Apache utilise des hôtes virtuels. De même, PHP-FPM gère de nombreuses versions de PHP sur une seule instance en utilisant un démon. Plusieurs applications web PHP exécutant différentes versions de PHP peuvent être hébergées simultanément sur le même serveur en utilisant Apache et PHP-FPM. Ceci est utile, car certaines piles de serveur, comme une pile LAMP configurée régulièrement, ne peuvent gérer qu’une seule version de PHP, même si diverses applications peuvent avoir besoin de plusieurs versions. L’hébergement de chaque programme sur sa propre instance est plus coûteux ; combiner Apache avec PHP-FPM est moins coûteux.

Pour les sites fortement trafiqués, PHP-FPM fournit en outre des options de configuration pour la journalisation stderr et stdout, les redémarrages d’urgence et le processus adaptatif. En réalité, l’une des plus grandes piles pour l’hébergement d’applications PHP, en particulier en termes de performance, est Apache avec PHP-FPM.

Vous configurerez deux sites PHP sur une seule instance dans ce tutoriel. Chaque site aura son propre domaine et utilisera une version PHP différente. Le premier lancera PHP 8.0 à web1.yourdomain.com. Le second déploiera PHP 7.4 à web2.yourdomain.com.

Prérequis

  • Serveur CentOS 7 ou RHEL.
  • Configuration du serveur web Apache.
  • Nom de domaine configuré pour pointer vers notre serveur.

Étape 1 : Installation des versions PHP et Apache

Tout d’abord, nous installerons epel repo puis installerons Apache avec les commandes suivantes.

$ sudo yum install epel-release -y
$ sudo yum install httpd

Après avoir configuré Apache, nous installerons le dépôt Remi, puis les versions 80 et 7.4 de PHP.

$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ sudo yum install yum-utils 
$ sudo yum install php80 php74
$ sudo yum install php80-php-fpm php74-php-fpm

Les deux versions de PHP sont en écoute par défaut sur le port 9000. Cependant, nous souhaitons exécuter deux versions simultanément dans ce tutoriel. Par conséquent, désignons deux nouveaux ports :

Vous pouvez le faire en ouvrant votre éditeur de texte préféré, en allant à /etc/opt/remi/php80/php-fpm.d/www.conf, et en changeant chaque instance de 9000 à 9080. Répétez la même chose pour /etc/opt/remi/php74/php-fpm.d/www.conf, en remplaçant 9000 par 9074 cette fois, puis enregistrez et fermez le fichier. Comme alternative, vous pouvez créer les remplacements en utilisant ces deux commandes sed :

$ sudo sed -i 's/:9000/:9080/' /etc/opt/remi/php80/php-fpm.d/www.conf
$ sudo sed -i 's/:9000/:9074/' /etc/opt/remi/php74/php-fpm.d/www.conf

Chacun de vos services PHP a maintenant un port unique qui a été mis de côté pour eux. Cependant, pour que ces modifications fonctionnent, vous devez ajouter les ports à votre configuration SELinux.

Security Enhanced Linux, ou SELinux en abrégé, est activé par défaut dans CentOS 7. Vos nouveaux ports 9080 et 9074 doivent être ajoutés à votre base de données SELinux et affectés à vos services httpd pour que vos applications fonctionnent. Appliquer la commande semanage à l’action suivante :

$ sudo semanage port -a -t http_port_t -p tcp 9080
$ sudo semanage port -a -t http_port_t -p tcp 9074

Les services php-fpm peuvent maintenant être lancés sur différents ports.

Vous êtes maintenant prêt à démarrer et à activer vos services PHP. Commencez par votre service php80-php-fpm et activez-le au démarrage :

$ sudo systemctl start php80-php-fpm
$ sudo systemctl enable php80-php-fpm

Vérifiez ensuite l’état de votre service php80-php-fpm :

$ sudo systemctl status php80-php-fpm
[root@centos7 ~]# sudo systemctl status php80-php-fpm
● php80-php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php80-php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-08-12 07:16:12 EDT; 14min ago
 Main PID: 65544 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php80-php-fpm.service
           ├─65544 php-fpm: master process (/etc/opt/remi/php80/php-fpm.conf)
           ├─65545 php-fpm: pool www
           ├─65546 php-fpm: pool www
           ├─65547 php-fpm: pool www
           ├─65548 php-fpm: pool www
           └─65549 php-fpm: pool www
Aug 12 07:16:12 centos7.linuxvmimages.local systemd[1]: Starting The PHP FastCGI Process Manager...
Aug 12 07:16:12 centos7.linuxvmimages.local systemd[1]: Started The PHP FastCGI Process Manager.

Maintenant vous êtes prêt à démarrer et à activer vos services PHP. Commencez par votre service php74-php-fpm et activez-le pour démarrer au démarrage :

$ sudo systemctl start php74-php-fpm
$ sudo systemctl enable php74-php-fpm

Vérifiez ensuite l’état de votre service php74-php-fpm :

$ sudo systemctl status php74-php-fpm
[root@centos7 ~]# sudo systemctl status php74-php-fpm
● php74-php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-08-12 07:16:20 EDT; 16min ago
 Main PID: 65556 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php74-php-fpm.service
           ├─65556 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
           ├─65557 php-fpm: pool www
           ├─65558 php-fpm: pool www
           ├─65559 php-fpm: pool www
           ├─65560 php-fpm: pool www
           └─65561 php-fpm: pool www
Aug 12 07:16:19 centos7.linuxvmimages.local systemd[1]: Starting The PHP FastCGI Process Manager...
Aug 12 07:16:20 centos7.linuxvmimages.local systemd[1]: Started The PHP FastCGI Process Manager.

Étape 2 : Création de répertoires pour les deux sites Web

Dans cette section, Pour chacun de vos deux sites Web, vous allez créer une page d’index et un répertoire racine de document.

Nous créons d’abord des répertoires pour nos sites web web1.yourdomain.com et web2.yourdomain.com.

$ sudo mkdir /var/www/web1.yourdomain.com
$ sudo mkdir /var/www/web2.yourdomain.com

L’utilisateur et le groupe Apache sont par défaut pour le serveur web Apache. Par conséquent, ils devraient également posséder /var/www/ et tous ses fichiers et sous-répertoires. Exécutez les commandes suivantes pour vous assurer que les dossiers racine de votre site Web sont possédés et ont les autorisations appropriées :

$ sudo chown -R apache:apache /var/www/web1.yourdomain.com
$ sudo chown -R apache:apache /var/www/web2.yourdomain.com
$ sudo chmod -R 755 /var/www/web1.yourdomain.com
$ sudo chmod -R 755 /var/www/web2.yourdomain.com

Grâce à la commande chown, les deux dossiers de votre site Web appartiennent désormais à l’utilisateur et au groupe Apache. La commande chmod modifie les permissions de l’utilisateur, du groupe et des autres personnes.

La prochaine étape est de créer un fichier info.php dans le répertoire racine de chaque site Web. Cela affichera les informations de version PHP pour chaque site Web. En commençant par web1.

$ sudo nano /var/www/web1.yourdomain.com/info.php

Ajouter la ligne suivante :

<?php phpinfo(); ?>

Enregistrer et copier le fichier, dans le deuxième site :

$ sudo cp /var/www/web1.yourdomain.com/info.php /var/www/web2.yourdomain.com/info.php

Étape 3 : Configuration d’Apache pour les deux sites Web

Vous allez construire deux fichiers de configuration d’hôte virtuel dans cette étape. Vos deux sites Web pourront fonctionner simultanément avec deux versions PHP distinctes grâce à cela.

Il est important de construire un fichier hôte virtuel avec les directives appropriées pour qu’Apache puisse livrer ce contenu. Dans le répertoire /etc/httpd/conf.d/, deux nouveaux fichiers de configuration d’hôte virtuel doivent être créés.

Tout d’abord, créez un nouveau fichier de configuration de l’hôte virtuel pour le site web1.yourdomain.com. Ici, vous ordonnerez à Apache de rendre le contenu en utilisant PHP 8.0 :

$ sudo nano /etc/httpd/conf.d/web1.yourdomain.com.conf

Ajouter le code suivant :

<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName web1.yourdomain.com
     DocumentRoot /var/www/web1.yourdomain.com
     DirectoryIndex info.php
     SetHandler "proxy:fcgi://127.0.0.1:9080"
     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
     AddHandler php80-fcgi .php
     Action php80-fcgi /cgi-bin/php80.fcgi
     ErrorLog /var/log/httpd/web1.yourdomain.com_error.log
     CustomLog /var/log/httpd/web1.yourdomain.com_access.log combined
</VirtualHost>

Faisons la même chose pour notre deuxième serveur.

$ sudo nano /etc/httpd/conf.d/web2.yourdomain.com.conf
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName web2.yourdomain.com
     DocumentRoot /var/www/web2.yourdomain.com
     DirectoryIndex info.php
     SetHandler "proxy:fcgi://127.0.0.1:9074"
     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
     AddHandler php74-fcgi .php
     Action php74-fcgi /cgi-bin/php74.fcgi
     ErrorLog /var/log/httpd/web2.yourdomain.com_error.log
     CustomLog /var/log/httpd/web2.yourdomain.com_access.log combined
</VirtualHost>

Lorsque vous avez terminé, enregistrez et fermez le fichier. Ensuite, recherchez toute erreur de syntaxe dans le fichier de configuration Apache :

$ sudo apachectl configtest
[root@centos7 ~]# sudo apachectl configtest
Syntax OK

Enfin, pour appliquer vos modifications, redémarrez le service Apache :

$ sudo systemctl restart httpd

Testons chaque site après avoir configuré Apache pour le servir afin de s’assurer que les versions PHP appropriées sont installées.

Étape 4 : Mise à l’essai de nos sites Web

Ouvrez votre navigateur Web et visitez les sites http://web1.yourdomain.com et http://web2.yourdomain.com.

http://web1.yourdomain.com/

web1.yourdomain.com php_info RHEL Redhat

http://web2.yourdomain.com/

web2.yourdomain.com php_info RHEL Redhat

Supprimez les fichiers info.php après avoir testé vos sites Web. Ils présentent un problème de sécurité parce qu’ils donnent aux utilisateurs non autorisés accès à des informations privées sur votre serveur. Se débarrasser des fichiers :

$ sudo rm -rf /var/www/web1.yourdomain.com/info.php
$ sudo rm -rf /var/www/web2.yourdomain.com/info.php

Vous utilisez maintenant deux sites Web utilisant deux versions PHP distinctes sur un seul serveur CentOS 7. Mais PHP-FPM n’est pas seulement pour cette application.

Conclusion

Maintenant que les hôtes virtuels et PHP-FPM ont été fusionnés, un seul serveur peut servir un certain nombre de sites Web et de versions de PHP. La puissance de traitement de votre instance est la seule restriction réelle sur le nombre de sites PHP et de versions PHP que votre serveur Apache peut supporter.

Laisser un commentaire