J'ai récemment acheté le plugin EduExpression WordPress pour un client afin de configurer un logiciel d'examen. J'ai pu installer et configurer le plugin sans trop de problème. Cependant, le problème a commencé à se produire lors de l'accès à la connexion de l'étudiant :la page du plug-in est devenue vide lorsque l'étudiant a tenté de passer un examen. Eh bien, j'ai un soutien, non ? J'ai contacté l'équipe de support et ils m'ont dit que le plugin ne fonctionnait pas avec PHP 7.1 et qu'il ne supportait que PHP 5.6. C'est ma faute - parce que mon serveur était configuré avec PHP 7.1 et que tous mes sites Web clients fonctionnaient sur PHP 7.1. Maintenant, pour faire fonctionner EduExpression, je dois configurer la version PHP 5.6. Rétrograder PHP n'est jamais une bonne option, mais je devais le faire pour que ce plugin fonctionne pour le client. Alors que diriez-vous de configurer PHP 5.6 uniquement pour un domaine particulier et de laisser le reste s'exécuter sur PHP 7.1. Eh bien, dans ce tutoriel, je vais vous expliquer comment configurer plusieurs versions de l'environnement PHP et lier une version spécifique de PHP à un domaine particulier dans NGINX.
EnvironnementSystème d'exploitation :CentOS 7, serveur Web :Nginx, PHP : v7.1 (par défaut), PHP FastCGI :PHP-FPM
Remarque :L'environnement ci-dessus est déjà configuré et fonctionne correctement.
Étape 1 :Installation de plusieurs versions de PHP, c'est-à-dire PHPv5.6 avec PHP7.1
Ici, j'utilise yum
commande pour installer plusieurs versions de PHP avec les modules nécessaires comme indiqué ci-dessous :
Installation de la version PHP5.6
# yum install php56 php56-php-common 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
Installer PHP-FPM pour la version PHP 5.6
PHP sur Nginx fonctionne via PHP-FPM (gestionnaire de processus FastCGI). PHP-FPM est une implémentation alternative de PHP FastCGI avec quelques fonctionnalités supplémentaires utiles pour les sites de toute taille, en particulier les sites les plus fréquentés.
# yum install php56-php-fpm
Eh bien, nous avons installé PHP 5.6, mais nous devons nous assurer que la version par défaut de PHP est toujours 7.1.
# php -v PHP 7.1.22 (cli) (built: Sep 12 2018 07:22:13) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.22, Copyright (c) 1999-2018, by Zend Technologies
Configurer PHP-FPM et PHP56-PHP-FPM
La partie la plus importante de ce tutoriel consiste à configurer deux PHP-FPM différents pour deux versions de PHP. Ici, nous allons configurer deux versions différentes de PHP-FPM avec lesquelles Nginx fonctionnera. L'élément principal lors de la configuration est l'utilisateur/groupe de processus FastCGI et les ports sur lesquels ils écoutent.
Fichier de configuration PHP-FPM (par défaut 7.1)/etc/php-fpm.d/www.conf
Assurez-vous que l'utilisateur/groupe est défini sur nginx
(La valeur par défaut est apache).
user = nginx group = nginx
Recherchez le paramètre d'écoute et définissez-le sur le port 9000 sur lequel les requêtes FastCGI seront reçues.
listen = 127.0.0.1:9000 [php-fpm]Fichier de configuration PHP56-PHP-FPM
/opt/remi/php56/root/etc/php-fpm.d/www.conf
Assurez-vous que l'utilisateur/groupe a défini nginx
(La valeur par défaut est apache).
user = nginx group = nginx
Recherchez le paramètre d'écoute et définissez-le sur le port 9001 sur lequel les requêtes FastCGI seront reçues.
listen = 127.0.0.1:9001 [php56-php-fpm]
Activer PHP-FPM, PHP56-PHP-FPM et NGINX démarrage automatique au démarrage du système sur CentOS 7
Après avoir terminé les configurations ci-dessus, vous devez activer le démarrage automatique de PHP-FPM, PHP56-PHP-FPM et Nginx au démarrage du système.
# systemctl enable nginx # systemctl enable php-fpm # systemctl enable php56-php-fpmDésactiver SELinux
#sudo setenforce 0
Configurer les domaines avec PHP-FPM correspondant pour les exécutions PHP
Ouvrez le fichier de configuration de domaine correspondant de Nginx (/etc/nginx/conf.d/
) et recherchez la ligne fastcgi_pass
et modifiez-le en conséquence pour lier la bonne version de PHP qu'il doit exécuter.
Fichier de configuration Nginx du domaine 1 :/etc/nginx/conf.d/example1.conf
server { listen :80; server_name example1.com; server_name www.example1.com; root /home/example1/public_html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?q=$uri$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; } }
Fichier de configuration Nginx du domaine 2 : /etc/nginx/conf.d/example2.conf
server { listen :80; server_name example2.com; server_name www.example2.com; root /home/example2/public_html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?q=$uri$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; } }
Vérifiez les fichiers de configuration Nginx pour toute erreur de syntaxe avant de redémarrer Nginx
# nginx -t
Redémarrer Nginx, PHP-fpm, PHp56-PHP-FPM
# systemctrl restart nginx, php-fpm php56-php-fpm
Tester différentes versions de PHP pour différents domaines
Créer différents phpinfo
fichiers sous le répertoire racine des deux domaines différents
# echo "<?php phpinfo(); ?>" > /home/example1/public_html/info.php # echo "<?php phpinfo(); ?>" > /home/example2/public_html/info.php
Ouvrez maintenant info.php
dans le navigateur pour vérifier example1.com en utilisant PHP 7.1 et example2.com en utilisant PHP 5.6.
http://example1.com/info.php
http://example2.com/info.php
C'est ça! Je viens de déployer le plugin EduExpression sur example2.com qui fonctionne sur PHP 5.6.