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
- Un serveur CentOS 7 ou RHEL 7 avec une installation minimale.
- Serveur HTTP Nginx.
- PHP 7.1 (à utiliser comme version par défaut) et 5.6.
- Serveur de base de données MariaDB.
- Adresse IP du serveur : 192.168.56.10.
- 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.