Recherche de site Web

Comment exécuter plusieurs sites Web avec différentes versions de PHP dans Nginx


Parfois, les développeurs PHP souhaitent créer et exécuter différents sites Web/applications en utilisant différentes versions de PHP sur le même serveur Web. En tant qu'administrateur système Linux, vous devez configurer un environnement dans lequel vous pouvez exécuter plusieurs sites Web en utilisant différentes versions de PHP sur un seul serveur Web, à savoir Nginx.

Dans ce tutoriel, nous allons vous expliquer comment installer plusieurs versions de PHP et configurer le serveur web Nginx pour qu'il fonctionne avec elles via les blocs serveur (hôtes virtuels dans Apache) dans Distributions CentOS/RHEL 7 utilisant la pile LEMP.

Lire aussi : Pyenv – Installer plusieurs versions de Python pour un projet spécifique

Nginx utilise PHP-FPM (signifie FastCGI Process Manager), qui est une implémentation alternative de PHP FastCGI avec quelques fonctionnalités supplémentaires et utiles pour les sites Web très chargés.

Configuration de l'environnement de test

  1. Un serveur CentOS 7 ou RHEL 7 avec une installation minimale.
  2. Serveur HTTP Nginx.
  3. PHP 7.1 (à utiliser comme version par défaut) et 5.6.
  4. Serveur de base de données MariaDB.
  5. Adresse IP du serveur : 192.168.56.10.
  6. Sites Web : example1.com et example2.com.

Étape 1 : Installation et activation du référentiel EPEL et Remi

1. Commencez par installer et activer les référentiels EPEL et Remi, qui proposent les dernières versions de PHP. pile sur les distributions CentOS/RHEL 7.

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

2. Installez ensuite le package yum-utils, qui étend les fonctionnalités natives de yum et fournit la commande yum-config-manager, qui est utilisée pour activer ou désactivez les référentiels Yum sur le système.

yum install yum-utils

Remarque : Sur RHEL 7, vous pouvez activer le canal facultatif pour certaines dépendances à l'aide de la commande suivante.

subscription-manager repos --enable=rhel-7-server-optional-rpms

Étape 2 : Installation du serveur Web Nginx

3. Pour installer la dernière version de Nginx, nous devons ajouter le référentiel officiel Nginx, créer un fichier nommé /etc/yum.repos.d/nginx.repo.

vi /etc/yum.repos.d/nginx.repo

Ajoutez les lignes suivantes au fichier selon votre distribution.

--------------- On CentOS 7 --------------- 
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=0 
enabled=1 


--------------- On RHEL 7 ---------------
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/ 
gpgcheck=0 
enabled=1 

4. Une fois le dépôt nginx ajouté, vous pouvez installer Nginx à l'aide de l'outil de gestion de packages yum, comme indiqué.

yum install nginx

Étape 3 : Installation du serveur de base de données MariaDB

5. Pour installer la dernière version de MariaDB, nous devons ajouter le référentiel officiel MariaDB, créer un fichier nommé /etc/yum.repos.d/mariadb.repo.

vi /etc/yum.repos.d/mariadb.repo

Ajoutez les lignes suivantes au fichier selon votre distribution.

--------------- On CentOS 7 --------------- 
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 

6. Une fois le référentiel MariaDB ajouté, vous pouvez installer MariaDB à l'aide de l'outil de gestion de packages yum, comme indiqué.

yum install MariaDB-client MariaDB-server

7. Ensuite, sécurisez l'installation du serveur de base de données à l'aide du script ci-dessous. Définissez un mot de passe root et répondez y et appuyez sur [Entrée] pour le reste des questions suivantes afin de désactiver la connexion de l'utilisateur root à distance, de supprimer les comptes d'utilisateurs anonymes et de tester la base de données qui, en default est accessible à tous les utilisateurs, même aux utilisateurs anonymes.

mysql_secure_installation

Lire aussi : 12 meilleures pratiques de sécurité MySQL/MariaDB pour Linux

Étape 4 : Installation de plusieurs versions de PHP

8. Pour installer différentes versions de PHP pour vos projets, utilisez la commande yum-config-manager pour installer plusieurs versions de PHP ainsi que la plupart des modules requis, comme indiqué.

Installer la version PHP 7.1

yum-config-manager --enable remi-php71  [Default]
yum install php php-common php-fpm
yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo

Installer la version PHP 5.6

yum install php56 php56-php-common php56-php-fpm
yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo

9. Une fois PHP installé, vous pouvez utiliser la commande suivante pour vérifier la version par défaut de PHP utilisée sur votre serveur.

php -v

Étape 5 : Configuration de PHP-FPM et PHP56-PHP-FPM

10. C'est la partie la plus intéressante de ce tutoriel, elle explique comment vous pouvez réellement exécuter plusieurs versions de PHP sur votre serveur. Ici, vous configurerez les différentes versions de php-fpm avec lesquelles Nginx fonctionnera. Vous devez définir l'utilisateur/groupe des processus FastCGI ainsi que les ports sur lesquels ils écouteront.

Ce sont les deux fichiers de configuration suivants que vous allez éditer.

  • php-fpm (par défaut 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

Ouvrez les fichiers ci-dessus, définissez l'utilisateur/groupe de processus FastCGI.

vi /etc/php-fpm.d/www.conf   [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 

Les valeurs par défaut doivent être apache, remplacez-les par nginx comme indiqué.

user = nginx
group = nginx

11. Ensuite, recherchez les paramètres d'écoute et définissez l'adresse:port sur lequel les requêtes FastCGI seront reçues.

listen = 127.0.0.1:9000	[php-fpm]
listen = 127.0.0.1:9001	[php56-php-fpm]

12. Une fois toute la configuration ci-dessus effectuée, vous devez démarrer et activer Nginx, MariaDB et PHP-FPM pour démarrer automatiquement au démarrage du système.

systemctl enable nginx 
systemctl start nginx 

systemctl enable mariadb 
systemctl start mariadb 

---------------- PHP 7.1 ---------------- 
systemctl enable php-fpm 
systemctl start php-fpm 

---------------- PHP 5.6 ----------------
systemctl enable php56-php-fpm 
systemctl start php56-php-fpm 

Attention : Si vous obtenez des erreurs lors du démarrage de la deuxième instance de PHP, php56-php-fpm, une politique SELinux pourrait bloquer depuis le début. Si SELinux est en mode d'application, réglez-le sur mode permissif, puis essayez de redémarrer le service.

getenforce
setenforce 0 

Étape 6 : Configurer des sites Web avec des autorisations

13. À ce stade, vous pouvez maintenant créer les répertoires nécessaires pour vos sites Web sous /var/www/html/. Vous devez également créer des répertoires pour stocker les journaux comme suit :

---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/ 
mkdir -p /var/log/nginx/example1.com/ 
 

---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/ 

14. Définissez les autorisations de propriété appropriées sur tous les répertoires.

---------------- Website 1 ----------------
chown -R root:nginx /var/www/html/example1.com/ 
chmod -R 755 /var/www/html/example1.com/ 
chown -R root:nginx /var/log/nginx/example1.com/
chmod -R 660 /var/log/nginx/example1.com/ 

---------------- Website 2 ----------------
chown -R root:nginx /var/www/html/example2.com/ 
chmod -R 755 /var/www/html/example2.com/
chown -R root:nginx /var/log/nginx/example2.com/ 
chmod -R 660 /var/log/nginx/example2.com/

Étape 7 : Configurer les blocs de serveur Nginx pour les sites Web

15. Configurez maintenant la manière dont Nginx traitera les requêtes vers vos sites Web à l'aide des fichiers de configuration du bloc serveur qui doivent se trouver dans /etc/nginx/conf.d/.

Créez les fichiers de configuration de vos sites Web se terminant par l'extension .conf.

vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf

Collez ensuite les configurations de blocs de serveur suivantes dans les fichiers respectifs.

Site Web 1

server {
        listen 80;
        server_name example1.com www.example1.com;

        root   /var/www/html/example1.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example1.com/example1_access_log;
        error_log   /var/log/nginx/example1.com/example1_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example1.com/;
                fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

Site Web 2

server {
        listen 80;
        server_name example2.com www.example2.com;

        root    /var/www/html/example2.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example2.com/example2_access_log;
        error_log  /var/log/nginx/example2.com/example2_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example2.com/;
                fastcgi_pass   127.0.0.1:9001;	#set port for php56-php-fpm to listen on
	        fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

16. Assurez-vous d'avoir la ligne suivante dans la partie fermante du bloc http dans /etc/nginx/nginx.conf. Il est utile d'inclure tous les fichiers de configuration dans le répertoire /etc/nginx/conf.d/ lorsque Nginx est en cours d'exécution.

include /etc/nginx/conf.d/*.conf;

Étape 8 : tester différentes versions de PHP

17. Enfin, vous devez tester que votre serveur utilise les deux versions de PHP. Vous pouvez créer un script info.php très basique dans les répertoires racines des documents de vos sites Web, comme indiqué.

echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18. Pour appliquer toutes les modifications que vous avez apportées ci-dessus, vous devez redémarrer Nginx, php-fpm et php56-php- fpm. Mais vous pouvez tout d’abord vérifier que les fichiers de configuration Nginx contiennent d’éventuelles erreurs de syntaxe avant de le faire.

nginx -t 
systemctl restart nginx php-fpm php56-php-fpm

19. Il y a une autre dernière chose à faire, surtout si vous exécutez votre serveur localement, vous devez configurer le DNS local à l'aide du fichier /etc/hosts comme indiqué dans le capture d'écran ci-dessous.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Enfin, ouvrez un navigateur Web et saisissez les adresses suivantes pour vérifier les versions de PHP installées sur le système.

http://example1.com/index.php
http://example2.com/index.php

C'est ça! Vous pouvez désormais déployer des fichiers et tester des sites Web avec différentes versions de PHP. Si vous avez des ajouts à apporter ou des questions à formuler, utilisez le formulaire de commentaires ci-dessous.