GNU/Linux >> Tutoriels Linux >  >> Linux

Exécutez plusieurs versions de PHP pour différents domaines dans NGNIX

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.

Environnement

Systè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-fpm
Dé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.


Linux
  1. nginx - 413 Entité de requête trop grande

  2. Configuration d'Apache pour Magento pour afficher différentes vues de magasin à partir de différentes URL/domaines.

  3. apt-get install pour différentes versions de python

  4. Comment exécuter plusieurs processus Tor à la fois avec différentes adresses IP de sortie ?

  5. Comment vérifier si plusieurs versions de PHP sont installées sur Ubuntu 12.04 LTS ?

Comment basculer entre plusieurs versions de PHP dans Ubuntu

Comment exécuter un script Python en PHP

Comment installer plusieurs versions de PHP sur Ubuntu 20.04, 18.04, 20.10

Comment exécuter différentes versions de PHP sur le même serveur

Comment installer différentes versions de PHP (5.6, 7.x et 8.0) dans Ubuntu

Héberger plusieurs sites Web avec différentes versions de PHP sur Ubuntu 18.04 VPS