One place for hosting & domains

      PHPFPM

      Cómo ejecutar múltiples versiones de PHP en un servidor usando Apache y PHP-FPM en CentOS 7


      El autor seleccionó COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      El servidor web Apache usa hosts virtuales para gestionar varios dominios en una sola instancia. De forma similar, PHP-FPM usa un demonio para gestionar varias versiones de PHP en una sola instancia. Puede usar Apache y PHP-FPM en conjunto para alojar varias aplicaciones web PHP, cada una con una versión distinta de PHP, en un mismo servidor al mismo tiempo. Esto es útil porque diversas aplicaciones pueden requerir distintas versiones de PHP, pero algunas pilas de servidores, como una pila LAMP configurada periódicamente, solo pueden gestionar una. La combinación de Apache con PHP-FPM también es una solución más rentable que alojar cada aplicación en su propia instancia.

      PHP-FPM también ofrece opciones de configuración para los registros stderr y stdout, reinicios de emergencia y creación de procesos adaptativos, lo que es útil para sitios muy cargados. De hecho, la combinación de Apache y PHP-FPM es una de las mejores pilas para alojar aplicaciones PHP, especialmente, en cuanto al rendimiento.

      En este tutorial, establecerá dos sitios PHP en una sola instancia. Cada sitio usará su propio dominio, y cada dominio implementará su propia versión de PHP. El primero, site1.your_domain, implementará PHP 7.0. El segundo, site2.your_domain, implementará PHP 7.2.

      Requisitos previos

      Paso 1: Instalar las versiones 7.0 y 7.2 de PHP con PHP-FPM

      Con los requisitos previos completados, instalará las versiones PHP 7.0 y 7.2. El repositorio SCL (colecciones de software) mantiene numerosas versiones de la pila PHP para el sistema CentOS 7. Si requiere la versión más reciente de PHP y no está disponible en SCL, consulte el PPA (archivo de paquetes personales) remi.

      Comience instalando el repositorio SCL en su sistema:

      • sudo yum install centos-release-scl -y

      Primero, vamos a descubrir qué versiones de PHP 7 están disponibles en SCL:

      • sudo yum list rh-php7[0-9].x86_64

      Verá un resultado como este:

      Output

      Available Packages rh-php70.x86_64 2.3-1.el7 centos-sclo-rh rh-php71.x86_64 1-1.el7 centos-sclo-rh rh-php72.x86_64 1-2.el7 centos-sclo-rh rh-php73.x86_64 1-1.el7 centos-sclo-rh

      Observará que la versión más reciente, PHP 7.3 está disponible también. Para nuestros ejemplos, sin embargo, instalaremos las versiones 7.0 y 7.2.

      Vamos a comenzar con la versión más antigua. Instale rh-php70 y rh-php70-php-fpm:

      • sudo yum install rh-php70 rh-php70-php-fpm -y
      • rh-php70 es un metapaquete que ejecuta aplicaciones PHP.
      • rh-php70-fpm ofrece el intérprete de Fast Process Manager, que se ejecuta como daemon y recibe solicitudes de Fast/CGI.

      Ahora, repita el proceso para la versión 7.2 de PHP. Instale rh-php72 y rh-php72-php-fpm.

      • sudo yum install rh-php72 rh-php72-php-fpm -y

      A continuación, ejecute los siguientes comandos usando ambas colecciones de software:

      • sudo scl enable rh-php70 bash
      • sudo scl enable rh-php72 bash

      Por defecto, ambas versiones de PHP escuchan en el puerto 9000. Pero en este tutorial, queremos ejecutar dos versiones simultáneamente. Por tanto, vamos a designar dos nuevos puertos:

      Para conseguir esto, puede abrir /etc/opt/rh/rh-php70/php-fpm.d/www.conf en el editor de texto que prefiera y cambiar cada aspecto de 9000 a 9002. Luego guarde y cierre el archivo y repita el proceso para /etc/opt/rh/rh-php72/php-fpm.d/www.conf​​​, y ahora sustituya 9000 con 9003. También puede usar dos comandos sed para realizar las sustituciones:

      • sudo sed -i 's/:9000/:9002/' /etc/opt/rh/rh-php70/php-fpm.d/www.conf
      • sudo sed -i 's/:9000/:9003/' /etc/opt/rh/rh-php72/php-fpm.d/www.conf

      Ahora ha designado un puerto dedicado para cada uno de sus servicios PHP. Antes de que funcionen estas modificaciones, sin embargo, debe añadir los puertos a su configuración SELinux.

      SELinux es la abreviatura de Security Enhanced Linux, y está habilitado por defecto en CentOS 7. Debe añadir sus nuevos puertos de 9002 y 9003 a su base de datos de SELinux y asignarlos a sus servicios httpd, o sus aplicaciones no se ejecutarán. Utilice el comando semanage para realizar esta tarea:

      • sudo semanage port -a -t http_port_t -p tcp 9002
      • sudo semanage port -a -t http_port_t -p tcp 9003

      El indicador -a especifica que está añadiendo un objeto a la base de datos. El indicador -t especifica el tipo de objeto, que en este caso es http_port_t. Y el indicador -p designa el protocolo tcp. Puede obtener más información sobre SELinux y sobre el comando semanage en este tutorial, o visitando la documentación oficial de SELinux.

      Ahora está listo para iniciar y habilitar sus servicios PHP. Comience con su servicio rh-php70-fpm y habilítelo para que se inicie en el arranque:

      • sudo systemctl start rh-php70-php-fpm
      • sudo systemctl enable rh-php70-php-fpm

      A continuación, verifique el estado de su servicio rh-php70-php-fpm:

      • sudo systemctl status rh-php70-php-fpm

      Verá un resultado como este:

      Output

      ● rh-php70-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago Main PID: 1852 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/rh-php70-php-fpm.service ├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf) ├─1853 php-fpm: pool www ├─1854 php-fpm: pool www ├─1855 php-fpm: pool www ├─1856 php-fpm: pool www └─1857 php-fpm: pool www Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager... Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

      Repitiendo este proceso, inicie el servicio rh-php72-php-fpm y habilítelo para que se inicie en el arranque:

      • sudo systemctl start rh-php72-php-fpm
      • sudo systemctl enable rh-php72-php-fpm

      A continuación, verifique el estado de su servicio rh-php72-php-fpm:

      • sudo systemctl status rh-php72-php-fpm

      Verá otro resultado como este:

      Output

      ● rh-php72-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago Main PID: 1876 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/rh-php72-php-fpm.service ├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf) ├─1877 php-fpm: pool www ├─1878 php-fpm: pool www ├─1879 php-fpm: pool www ├─1880 php-fpm: pool www └─1881 php-fpm: pool www Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager... Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

      En este punto, instaló dos versiones de PHP en su servidor. A continuación, creará una estructura de directorios para cada sitio web que desee implementar.

      Paso 2: Crear estructuras de directorios para los dos sitios web

      En esta sección, creará un directorio root de documentos y una página de índice para cada uno de sus dos sitios web.

      Primero, cree directorios root de documentos para site1.your_domain y site2.your_domain:

      • sudo mkdir /var/www/site1.your_domain
      • sudo mkdir /var/www/site2.your_domain

      Por defecto, un servidor web Apache se ejecuta como un usuario apache y un grupo apache. De forma que /var/www/ y todos sus archivos y subdirectorios también deberían ser propiedad de ellos. Ejecute los siguientes comandos para verificar la propiedad y permisos correctos de sus directorios raíz del sitio web:

      • sudo chown -R apache:apache /var/www/site1.your_domain
      • sudo chown -R apache:apache /var/www/site2.your_domain
      • sudo chmod -R 755 /var/www/site1.your_domain
      • sudo chmod -R 755 /var/www/site2.your_domain

      El comando chown cambia la propiedad de sus dos directorios del sitio web al usuario apache y al grupo apache. El comando chmod cambia los permisos asociados con ese usuario y grupo, además de los otros.

      A continuación, creará un archivo info.php en el directorio root de cada sitio web. Esto mostrará la información de la versión de PHP de cada sitio web. Comience con site1:

      • sudo vi /var/www/site1.your_domain/info.php

      Añada la siguiente línea:

      /var/www/site1.your_domain/info.php

      <?php phpinfo(); ?>
      

      Guarde y cierre el archivo. Ahora, copie el archivo info.php que creó a site2:

      • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

      Ahora, su servidor web debería tener los directorios root del documento que cada sitio requiere para presentar datos a los visitantes. A continuación, configurará su servidor web Apache para que funcione con dos versiones de PHP distintas.

      Paso 3: Configurar Apache en los dos sitios web

      En esta sección, creará dos archivos de configuración de host virtual. Esto permitirá que sus dos sitios web funcionen en simultáneo con dos versiones de PHP distintas.

      Para que Apache proporcione este contenido, es necesario crear un archivo de host virtual con las directivas correctas. Creará dos nuevos archivos de configuración host virtuales dentro del directorio /etc/httpd/conf.d/.

      Primero, cree un nuevo archivo de configuración de host virtual para el sitio web site1.your_domain. Aquí, le indicará a Apache que represente contenido usando PHP 7.0:

      • sudo vi /etc/httpd/conf.d/site1.your_domain.conf

      Añada el siguiente contenido: Asegúrese de que la ruta del directorio del sitio web, el nombre del servidor y la versión de PHP concuerden con su configuración:

      /etc/httpd/conf.d/site1.your_domain.conf

      
      <VirtualHost *:80>
           ServerAdmin admin@site1.your_domain
           ServerName site1.your_domain
           DocumentRoot /var/www/site1.your_domain
           DirectoryIndex info.php
           SetHandler "proxy:fcgi://127.0.0.1:9002
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
           AddHandler php70-fcgi .php
           Action php70-fcgi /cgi-bin/php70.fcgi
           ErrorLog /var/log/httpd/site1.your_domain_error.log
           CustomLog /var/log/httpd/site1.your_domain_access.log combined
      </VirtualHost>
      

      Para DocumentRoot está especificando la ruta del directorio raíz de su sitio web. Para ServerAdmin, está añadiendo un correo electrónico al que el administrador del sitio your_domain puede acceder. Para ServerName, está añadiendo la url para su primer subdominio. Para SetHandler, está especificando el puerto 9002. Las directivas restantes también configuran su servicio para implementar PHP 7.0.

      Guarde y cierre el archivo.

      A continuación, cree un nuevo archivo de configuración de host virtual para el sitio web site2.your_domain. Especificará que este subdominio implemente PHP 7.2:

      • sudo vi /etc/httpd/conf.d/site2.your_domain.conf

      Añada el siguiente contenido: Nuevamente, asegúrese de que la ruta del directorio del sitio web, el nombre del servidor, puerto y la versión de PHP concuerden con su información única:

      /etc/httpd/conf.d/site2.your_domain.conf

      <VirtualHost *:80>
           ServerAdmin admin@site2.your_domain
           ServerName site2.your_domain
           DocumentRoot /var/www/site2.your_domain
           DirectoryIndex info.php
           SetHandler "proxy:fcgi://127.0.0.1:9003
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
           AddHandler php72-fcgi .php
           Action php72-fcgi /cgi-bin/php72.fcgi
           ErrorLog /var/log/httpd/site2.your_domain_error.log
           CustomLog /var/log/httpd/site2.your_domain_access.log combined
      </VirtualHost>
      

      Guarde y cierre el archivo cuando termine. Luego, compruebe que no haya errores de sintaxis en el archivo de configuración de Apache:

      • sudo apachectl configtest

      Verá un resultado que imprime Syntax OK:

      Output

      Por último, reinicie el servicio de Apache para implementar los cambios:

      • sudo systemctl restart httpd

      Ahora, que configuró Apache para que sirva cada sitio, los probará para asegurarse de que se estén ejecutando las versiones de PHP correspondientes.

      Paso 4: Probar los dos sitios web

      En este punto, configuró dos sitios web para que ejecuten dos versiones distintas de PHP. Ahora, pruebe los resultados.

      Abra su navegador web y visite los dos sitios http://site1.your_domain y http://site2.your_domain. Verá dos páginas como las siguientes:

      Página de información de PHP 7.0Página de información de PHP 7.2

      Observe los títulos. La primera página indica que site1.your_domain implementó la versión 7.0. La segunda, indica que site2.your_domain implementó la versión 7.2.

      Ahora que probó sus sitios, elimine los archivos info.php. Plantean una amenaza de seguridad, dado que contienen información confidencial sobre su servidor y usuarios no autorizados pueden acceder a ellos. Elimine los archivos:

      • sudo rm -rf /var/www/site1.your_domain/info.php
      • sudo rm -rf /var/www/site2.your_domain/info.php

      Ahora, tiene un único servidor CentOS 7 que gestiona dos sitios web con dos versiones de PHP distintas. Sin embargo, PHP no se limita a este único uso.

      Conclusión

      Ahora, tiene hosts virtuales y PHP-FPM combinados para servir varios sitios web y varias versiones de PHP en un único servidor. Lo único que limita la cantidad de sitios y versiones de PHP que su servicio de Apache puede gestionar es la potencia de procesamiento de su instancia.

      Desde aquí, puede considerar explorar las funciones más avanzadas de PHP-FPM, como su proceso de creación adaptativa y cómo puede registrar sdtout y stderr. También podría ahora proteger sus sitios web. Para hacerlo, puede seguir nuestro tutorial Cómo proteger sus sitios con certificados TLS y SSL gratuitos de Let´s Encrypt.



      Source link

      Comment exécuter plusieurs Versions PHP sur un serveur en utilisant Apache et PHP-FPM sur CentOS 7


      L’auteur a choisi le COVID-19 Relief Fund pour recevoir un don dans le cadre du programme Write for DOnations.

      Introduction

      Le serveur web Apache utilise des hôtes virtuels pour gérer plusieurs domaines sur une seule instance. De même, PHP-FPM utilise un démon pour gérer plusieurs versions PHP sur une seule instance. Vous pouvez utiliser ensemble Apache et PHP-FPM pour héberger plusieurs applications Web PHP, chacune utilisant une version différente de PHP, toutes sur le même serveur, et toutes en même temps. C’est utile car différentes applications peuvent nécessiter différentes versions de PHP, mais certaines piles de serveurs, telles qu’une pile LAMP régulièrement configurée, ne peuvent gérer qu’une seule version. Combiner Apache avec PHP-FPM est également une solution plus économique que d’héberger chaque application sur sa propre instance.

      PHP-FPM offre également des options de configuration pour la journalisation stderr et stdout, les redémarrages d’urgence et le lancement de processus adaptatifs, ce qui est utile pour les sites très chargés. En fait, l’utilisation d’Apache avec PHP-FPM est l’une des meilleures piles pour héberger des applications PHP, surtout en matière de performances.

      Dans ce tutoriel, vous allez configurer deux sites PHP sur une seule instance. Chaque site utilisera son propre domaine, et chaque domaine déploiera sa propre version de PHP. Le premier, site1.your_domain, déploiera PHP 7.0. La deuxième, site2.your_domain, déploiera PHP 7.2.

      Conditions préalables

      Étape 1 – Installation des Versions PHP 7.0 et 7.2 avec PHP-FPM

      Une fois les conditions préalables remplies, vous allez maintenant installer les versions PHP 7.0 et 7.2. Le référentiel SCL (Collections de logiciels) maintient de nombreuses versions de la pile PHP pour le système CentOS 7. Si vous avez besoin de la version la plus récente de PHP et qu’elle n’est pas disponible sur SCL, consultez plutôt le PPA (personal package archive) de remi.

      Commencez par installer le référentiel SCL sur votre système :

      • sudo yum install centos-release-scl -y

      Voyons d’abord quelles versions de PHP 7 sont disponibles sur SCL :

      • sudo yum list rh-php7[0-9].x86_64

      Vous verrez une sortie de ce type :

      Output

      Available Packages rh-php70.x86_64 2.3-1.el7 centos-sclo-rh rh-php71.x86_64 1-1.el7 centos-sclo-rh rh-php72.x86_64 1-2.el7 centos-sclo-rh rh-php73.x86_64 1-1.el7 centos-sclo-rh

      Vous verrez que la version la plus récente, PHP 7.3, est également disponible. Pour nos exemples, nous allons toutefois installer les versions 7.0 et 7.2.

      Commençons par la version la plus ancienne. Installez rh-php70 et rh-php70-php-fpm :

      • sudo yum install rh-php70 rh-php70-php-fpm -y
      • rh-php70 est un metapackage qui exécute des applications PHP.
      • rh-php70-php-fpm fournit l’interpréteur Fast Process Manager qui fonctionne comme démon et reçoit des requêtes Fast/CGI.

      Repérez maintenant le processus pour la version PHP 7.2. Installez rh-php72 et rh-php72-php-fpm.

      • sudo yum install rh-php72 rh-php72-php-fpm -y

      Ensuite, exécutez les commandes suivantes pour commencer à utiliser les deux collections logicielles :

      • sudo scl enable rh-php70 bash
      • sudo scl enable rh-php72 bash

      Par défaut, les deux versions de PHP sont à l’écoute sur le port 9000. Mais dans ce tutoriel, nous voulons exécuter deux versions simultanément. Par conséquent, nous allons désigner deux nouveaux ports :

      Pour ce faire, vous pouvez ouvrir /etc/opt/rh/rh-php70/php-fpm.d/www.conf dans votre éditeur de texte préféré et changer chaque apparence de 9000 à 9002. Ensuite, enregistrez et fermez le fichier et répétez le processus pour /etc/opt/rh/rh-php72/php-fpm.d/www.conf, ne remplacez maintenant 9000 que par 9003. Vous pouvez en outre utiliser ces deux commandes sed pour faire les remplaçants :

      • sudo sed -i 's/:9000/:9002/' /etc/opt/rh/rh-php70/php-fpm.d/www.conf
      • sudo sed -i 's/:9000/:9003/' /etc/opt/rh/rh-php72/php-fpm.d/www.conf

      Vous avez maintenant désigné un port dédié pour chacun de vos services PHP. Cependant, avant que ces modifications ne fonctionnent, vous devez ajouter les ports à votre configuration SELinux.

      CentOS 7. Vous devez ajouter vos nouveaux ports 9002 et 9003 à votre base de données SELinux et les attribuer à vos services httpd, sinon vos applications ne fonctionneront pas. Utilisez la commande semanage pour effectuer cette tâche :

      • sudo semanage port -a -t http_port_t -p tcp 9002
      • sudo semanage port -a -t http_port_t -p tcp 9003

      Le drapeau -a spécifie que vous ajoutez un objet à la base de données. Le drapeau -t spécifie le type d’objet, qui dans ce cas est http_port_t​​​. Et le drapeau -p désigne le protocole tcp. Vous pouvez en apprendre davantage sur SELinux et la commande semanage dans ce tutoriel, ou en consultant la documentation officielle SELinux.

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

      • sudo systemctl start rh-php70-php-fpm
      • sudo systemctl enable rh-php70-php-fpm

      Ensuite, vérifiez l’état de votre service rh-php70-php-fpm

      • sudo systemctl status rh-php70-php-fpm

      Vous verrez une sortie de ce type :

      Output

      ● rh-php70-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago Main PID: 1852 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/rh-php70-php-fpm.service ├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf) ├─1853 php-fpm: pool www ├─1854 php-fpm: pool www ├─1855 php-fpm: pool www ├─1856 php-fpm: pool www └─1857 php-fpm: pool www Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager... Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

      En répétant ce processus, démarrez le service rh-php72-php-fpm et activez-le au démarrage :

      • sudo systemctl start rh-php72-php-fpm
      • sudo systemctl enable rh-php72-php-fpm

      Ensuite, vérifiez l’état de votre service rh-php72-php-fpm

      • sudo systemctl status rh-php72-php-fpm

      Vous verrez une autre sortie comme celle-ci :

      Output

      ● rh-php72-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago Main PID: 1876 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/rh-php72-php-fpm.service ├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf) ├─1877 php-fpm: pool www ├─1878 php-fpm: pool www ├─1879 php-fpm: pool www ├─1880 php-fpm: pool www └─1881 php-fpm: pool www Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager... Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

      À ce stade, vous avez installé deux versions PHP sur votre serveur. Ensuite, vous allez créer une structure de répertoire pour chaque site web que vous voulez déployer.

      Étape 2 — Création de structures répertoire pour les deux sites Web

      Dans cette section, vous créerez un répertoire root de document et une page index pour chacun de vos deux sites Web.

      Tout d’abord, créez des répertoires root de documents à la fois pour site1.your_domain et site2.your_domain

      • sudo mkdir /var/www/site1.your_domain
      • sudo mkdir /var/www/site2.your_domain

      Par défaut, le serveur web Apache fonctionne comme un utilisateur apache et un groupe apache. Donc /var/www/ et tous ses fichiers et sous-répertoires devraient également leur appartenir. Exécutez les commandes suivantes pour vérifier la propriété et les autorisations correctes des répertoires racines de votre site web :

      • sudo chown -R apache:apache /var/www/site1.your_domain
      • sudo chown -R apache:apache /var/www/site2.your_domain
      • sudo chmod -R 755 /var/www/site1.your_domain
      • sudo chmod -R 755 /var/www/site2.your_domain

      La commande chown change la propriété des deux répertoires de votre site web pour l’utilisateur apache et le groupe apache. La commande chmod modifie les permissions associées à cet utilisateur et au groupe, ainsi qu’à d’autres.

      Ensuite, vous allez créer un fichier info.php à l’intérieur du répertoire root de chaque site Web. Cela affichera les informations de version PHP de chaque site Web. Commencez avec site1

      • sudo vi /var/www/site1.your_domain/info.php

      Ajoutez la ligne suivante :

      /var/www/site1.your_domain/info.php

      <?php phpinfo(); ?>
      

      Enregistrez et fermez le fichier. Copiez maintenant le fichier info.php que vous avez créé sur site2

      • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

      Votre serveur web dispose maintenant des répertoires racine des documents dont chaque site a besoin pour fournir des données aux visiteurs. Ensuite, vous allez configurer votre serveur web Apache pour qu’il fonctionne avec deux versions PHP différentes.

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

      Dans cette section, vous allez créer deux fichiers de configuration d’hôte virtuel. Cela permettra à vos deux sites web de fonctionner simultanément avec deux versions PHP différentes.

      Pour qu’Apache puisse servir ce contenu, il est nécessaire de créer un fichier d’hôte virtuel avec les directives correctes. Vous allez créer deux nouveaux fichiers de configuration d’hôte virtuel dans le répertoire /etc/httpd/conf.d/.

      Commencez par créer un nouveau fichier de configuration d’hôte virtuel pour le site Web site1.your_domain. Ici, vous allez indiquer à Apache de rendre le contenu en utilisant PHP 7.0 :

      • sudo vi /etc/httpd/conf.d/site1.your_domain.conf

      Ajoutez le contenu suivant. Assurez-vous le chemin du répertoire du site Web, le nom du serveur, le port et la version PHP correspondent à votre configuration :

      /etc/httpd/conf.d/site1.your_domain.conf

      
      <VirtualHost *:80>
           ServerAdmin admin@site1.your_domain
           ServerName site1.your_domain
           DocumentRoot /var/www/site1.your_domain
           DirectoryIndex info.php
           SetHandler "proxy:fcgi://127.0.0.1:9002
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
           AddHandler php70-fcgi .php
           Action php70-fcgi /cgi-bin/php70.fcgi
           ErrorLog /var/log/httpd/site1.your_domain_error.log
           CustomLog /var/log/httpd/site1.your_domain_access.log combined
      </VirtualHost>
      

      Pour DocumentRoot, vous spécifiez le chemin du répertoire racine de votre site web. Pour ServerAdmin, vous ajoutez un courriel auquel l’administrateur du site your_domain peut accéder. Pour ServerName, vous ajoutez l’url de votre premier sous-domaine. Pour SetHandler, vous spécifiez le port 9002. Les autres directives configurent également votre service pour déployer PHP 7.0.

      Enregistrez et fermez le fichier.

      Ensuite, créez un nouveau fichier de configuration d’hôte virtuel pour le site Web site2.your_domain. Vous allez spécifier ce sous domaine pour déployer PHP 7.2 :

      • sudo vi /etc/httpd/conf.d/site2.your_domain.conf

      Ajoutez le contenu suivant. Là encore, assurez-vous que le chemin d’accès au répertoire du site web, le nom du serveur, le port et la version PHP correspondent à vos informations uniques :

      /etc/httpd/conf.d/site2.your_domain.conf

      <VirtualHost *:80>
           ServerAdmin admin@site2.your_domain
           ServerName site2.your_domain
           DocumentRoot /var/www/site2.your_domain
           DirectoryIndex info.php
           SetHandler "proxy:fcgi://127.0.0.1:9003
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
           AddHandler php72-fcgi .php
           Action php72-fcgi /cgi-bin/php72.fcgi
           ErrorLog /var/log/httpd/site2.your_domain_error.log
           CustomLog /var/log/httpd/site2.your_domain_access.log combined
      </VirtualHost>
      

      Enregistrez et fermez le fichier lorsque vous avez terminé. Vérifiez ensuite le fichier de configuration Apache pour détecter toute erreur de syntaxe :

      • sudo apachectl configtest

      Vous verrez une sortie d’impression Syntax OK :

      Output

      Enfin, redémarrez le service Apache pour implémenter vos changements :

      • sudo systemctl restart httpd

      Maintenant que vous avez configuré Apache pour servir chaque site, vous allez tester les sites pour vous assurer que les versions PHP adéquates tournent.

      Étape 4 — Test des deux sites Web

      À ce stade, vous avez configuré deux sites web pour exécuter deux versions différentes de PHP. Testez maintenant les résultats.

      Ouvrez votre navigateur web et consultez les deux sites http://site1.your_domain et http://site2.your_domain Vous verrez deux pages qui ressemblent à ceci :

      PHP 7.0 info pagePHP 7.2 info page

      Notez les titres. La première page indique que site1.your_domain a déployé PHP version 7.0. La deuxième indique que site2.your_domain a déployé PHP version 7.2.

      Maintenant que vous avez testé vos sites, supprimez les fichiers info.php. Étant donné qu’ils contiennent des informations sensibles sur votre serveur et sont accessibles a des utilisateurs non autorisés, ils constituent une faille de sécurité. Supprimez les fichiers :

      • sudo rm -rf /var/www/site1.your_domain/info.php
      • sudo rm -rf /var/www/site2.your_domain/info.php

      Vous disposez désormais d’un seul serveur CentOS 7 qui gère deux sites web avec deux versions différentes de PHP. Cela dit, PHP-FPM n’est pas limité à cette seule application.

      Conclusion

      Vous avez maintenant combiné des hôtes virtuels et PHP-FPM pour servir plusieurs sites web et plusieurs versions de PHP sur un seul serveur. La seule limite pratique sur le nombre de sites PHP et les versions PHP que votre service Apache peut gérer est la puissance de traitement de votre instance.

      À partir de là, vous pourriez envisager d’explorer les fonctionnalités plus avancées de PHP-FPM, comme son processus de spawning adaptatif ou la façon dont il peut enregistrer sdtout et stderr.  Par ailleurs, vous pourriez désormais sécuriser vos sites web. Pour ce faire, vous pouvez suivre notre tutoriel sur comment sécuriser vos sites avec des certificats TLS/SSL gratuits de Let’s Encrypt.



      Source link

      Запуск нескольких версий PHP на одном сервере с использованием Apache и PHP-FPM в CentOS 7


      Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Веб-сервер Apache использует виртуальные хосты для управления несколькими доменами в одной системе. PHP-FPM использует демона для управления несколькими версиями PHP в одной системе. Вы можете использовать Apache и PHP-FPM для одновременного хостинга на одном сервере нескольких веб-приложений PHP на основе разных версий PHP. Эта возможность полезна, поскольку разным приложениям могут требоваться разные версии PHP, но некоторые серверные комплексы, в том числе комплекс LAMP в стандартной конфигурации, могут работать только с одной версией. Сочетание Apache с PHP-FPM более экономично по сравнению с хостингом каждого приложения на отдельном экземпляре сервера.

      Также PHP-FPM предлагает разные варианты конфигурации для регистрации данных stderr и stdout, аварийной перезагрузки и адаптивного создания процессов, что полезно для сайтов с высокой нагрузкой. Использование Apache с PHP-FPM — один из лучших вариантов хостинга приложений PHP, особенно с точки зрения производительности.

      В этом обучающем руководстве мы настроим два сайта PHP для работы на одном экземпляре сервера. Каждый сайт будет использовать собственный домен, и на каждом домене будет использоваться собственная версия PHP. Первый сайт site1.your_domain развернет PHP 7.0. Второй сайт site2.your_domain развернет PHP 7.2.

      Предварительные требования

      • Один сервер CentOS 7 с не менее чем 1 ГБ оперативной памяти, настроенный согласно руководству Начальная настройка сервера CentOS 7, с пользователем non-root user с привилегиями sudo и брандмауэром.
      • Веб-сервер Apache, установленный и настроенный в соответствии с указаниями руководства Установка веб-сервера Apache в CentOS 7​​​.
      • Доменное имя, настроенное так, чтобы указывать на ваш сервер CentOS 7. Информацию о том, как сделать так, чтобы домены указывали на дроплеты DigitalOcean, можно найти в руководстве Создание указаний на серверы имен DigitalOcean из общих реестров доменов. Для целей настоящего обучающего модуля мы используем два субдомена, каждый из которых указан с записью A в наших настройках DNS: site1.your_domain и site2.your_domain.

      Шаг 1 — Установка PHP версий 7.0 и 7.2 с помощью PHP-FPM

      После выполнения предварительных требований мы установим версии PHP 7.0 и 7.2. Репозиторий SCL (Software Collections) содержит множество версий стеков PHP для систем CentOS 7. Если вам нужна абсолютно новая версия PHP, которой нет на SCL, проверьте remi PPA (персональные архивы пакетов).

      Начнем с установки репозитория SCL в вашу систему:

      • sudo yum install centos-release-scl -y

      Сначала узнаем, какие версии PHP 7 доступны в SCL:

      • sudo yum list rh-php7[0-9].x86_64

      Вывод будет выглядеть следующим образом:

      Output

      Available Packages rh-php70.x86_64 2.3-1.el7 centos-sclo-rh rh-php71.x86_64 1-1.el7 centos-sclo-rh rh-php72.x86_64 1-2.el7 centos-sclo-rh rh-php73.x86_64 1-1.el7 centos-sclo-rh

      Вы заметите, что доступна также новейшая версия, PHP 7.3. Но в наших примерах мы установим версии 7.0 и 7.2.

      Начнем с более ранней версии. Установите rh-php70 и rh-php70-php-fpm​​​:

      • sudo yum install rh-php70 rh-php70-php-fpm -y
      • rh-php70 — это метапакет, который запускает приложения PHP.
      • rh-php70-php-fpm​​​ предоставляет интерпретатор Fast Process Manager, который работает как демон и принимает запросы Fast/CGI.

      Повторите процедуру для PHP версии 7.2. Установите rh-php72 и rh-php72-php-fpm​​​.

      • sudo yum install rh-php72 rh-php72-php-fpm -y

      Далее запустите следующие команды для начала использования обеих коллекций Software Collections:

      • sudo scl enable rh-php70 bash
      • sudo scl enable rh-php72 bash

      По умолчанию обе версии PHP прослушивают порт 9000. Но в этом обучающем руководстве мы хотим запустить две версии одновременно. Поэтому назначим два новых порта:

      Для этого откройте /etc/opt/rh/rh-php70/php-fpm.d/www.conf в предпочитаемом текстовом редакторе и измените каждое представление 9000 на 9002. Затем сохраните и закройте файл и повторите процедуру для /etc/opt/rh/rh-php72/php-fpm.d/www.conf, только сейчас замените 9000 на 9003. Вы можете использовать эти две команды sed​​​ поочередно, чтобы выполнить замены:

      • sudo sed -i 's/:9000/:9002/' /etc/opt/rh/rh-php70/php-fpm.d/www.conf
      • sudo sed -i 's/:9000/:9003/' /etc/opt/rh/rh-php72/php-fpm.d/www.conf

      Сейчас вы назначили выделенный порт для каждой из ваших служб PHP. Перед выполнением этих изменений необходимо, тем не менее, добавить порты в вашу конфигурацию SELinux.

      SELinux — это сокращение от Security Enhanced Linux, которое активируется по умолчанию на CentOS 7. Необходимо добавить новые порты 9002 и 9003 в вашу базу данных SELinux и назначить их для ваших служб httpd, иначе ваши приложения не будут запускаться. Для выполнения этой задачи используйте команду semanage:

      • sudo semanage port -a -t http_port_t -p tcp 9002
      • sudo semanage port -a -t http_port_t -p tcp 9003

      Флаг -a указывает на то, что вы добавляете объект в базу данных. Флаг -t указывает тип объекта, которым в данном случае является http_port_t​​​. А флаг -p определяет протокол tcp​​​. Дополнительную информацию о SELinux и команде semanage можно найти в этом обучающем руководстве или обратившись к официальной документации SELinux.

      Теперь вы готовы запустить и активировать ваши службы PHP. Начнем со службы rh-php70-php-fpm и активируем ее запуск во время загрузки:

      • sudo systemctl start rh-php70-php-fpm
      • sudo systemctl enable rh-php70-php-fpm

      Затем проверьте статус службы rh-php70-php-fpm:

      • sudo systemctl status rh-php70-php-fpm

      Вывод будет выглядеть следующим образом:

      Output

      ● rh-php70-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago Main PID: 1852 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/rh-php70-php-fpm.service ├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf) ├─1853 php-fpm: pool www ├─1854 php-fpm: pool www ├─1855 php-fpm: pool www ├─1856 php-fpm: pool www └─1857 php-fpm: pool www Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager... Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

      Повторите эту процедуру, запустите службу rh-php72-php-fpm и активируйте ее запуск во время загрузки:

      • sudo systemctl start rh-php72-php-fpm
      • sudo systemctl enable rh-php72-php-fpm

      Затем проверьте статус службы rh-php72-php-fpm:

      • sudo systemctl status rh-php72-php-fpm

      Другой вывод будет выглядеть следующим образом:

      Output

      ● rh-php72-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago Main PID: 1876 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/rh-php72-php-fpm.service ├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf) ├─1877 php-fpm: pool www ├─1878 php-fpm: pool www ├─1879 php-fpm: pool www ├─1880 php-fpm: pool www └─1881 php-fpm: pool www Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager... Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

      Мы установили на сервере две версии PHP. Теперь создадим структуру каталогов для каждого сайта, который будем развертывать.

      Шаг 2 — Создание структур каталогов для обоих сайтов

      В этом разделе мы создадим корневой каталог документов и страницу индекса для каждого из двух сайтов.

      Вначале создайте корневые каталоги документов для site1.your_domain и site2.your_domain:

      • sudo mkdir /var/www/site1.your_domain
      • sudo mkdir /var/www/site2.your_domain

      По умолчанию веб-сервер Apache работает как пользователь apache и группа apache. Поэтому /var/www/ и все его файлы и подкаталоги также должны принадлежать им. Запустите следующие команды для проверки правильности владения и разрешений корневых каталогов вашего веб-сайта:

      • sudo chown -R apache:apache /var/www/site1.your_domain
      • sudo chown -R apache:apache /var/www/site2.your_domain
      • sudo chmod -R 755 /var/www/site1.your_domain
      • sudo chmod -R 755 /var/www/site2.your_domain

      Команда chown меняет владельца двух каталогов веб-сайта на пользователя apache и группу apache. Команда chmod меняет разрешения, связанные с этим и другими пользователями и группами.

      Далее вы создадите файл info.php в корневом каталоге каждого сайта. В нем будет отображаться информация о версии PHP для каждого сайта. Начнем с site1:

      • sudo vi /var/www/site1.your_domain/info.php

      Добавьте следующую строку:

      /var/www/site1.your_domain/info.php

      <?php phpinfo(); ?>
      

      Сохраните и закройте файл. Скопируйте созданный файл info.php в site2:

      • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

      Теперь на вашем веб-сервере имеются корневые каталоги документов, которые требуются каждому сайту для предоставления данных посетителям. Далее мы настроим веб-сервер Apache для работы с двумя разными версиями PHP.

      Шаг 3 — Настройка Apache для обоих сайтов

      В этом разделе мы создадим два файла конфигурации виртуального хоста. Это позволит двум нашим сайтам одновременно работать с двумя разными версиями PHP.

      Для обслуживания этого контента Apache необходимо создать файл виртуального хоста с правильными директивами. Вы создадите два новых файла конфигурации виртуального хоста внутри каталога /etc/httpd/conf.d/.

      Вначале создайте новый файл конфигурации виртуального хоста для сайта site1.your_domain. Здесь вы предписываете Apache использовать для рендеринга содержимого PHP 7.0:

      • sudo vi /etc/httpd/conf.d/site1.your_domain.conf

      Добавьте в файл следующее: Убедитесь, что путь к каталогу сайта, имя сервера, порт и версия PHP соответствуют вашей настройке:

      /etc/httpd/conf.d/site1.your_domain.conf

      
      <VirtualHost *:80>
           ServerAdmin admin@site1.your_domain
           ServerName site1.your_domain
           DocumentRoot /var/www/site1.your_domain
           DirectoryIndex info.php
           SetHandler "proxy:fcgi://127.0.0.1:9002
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
           AddHandler php70-fcgi .php
           Action php70-fcgi /cgi-bin/php70.fcgi
           ErrorLog /var/log/httpd/site1.your_domain_error.log
           CustomLog /var/log/httpd/site1.your_domain_access.log combined
      </VirtualHost>
      

      Для DocumentRoot вы указываете путь корневого каталога вашего веб-сайта. Для ServerAdmin вы добавляете адрес электронной почты, к которому имеет доступ администратор сайта your_domain. Для ServerName вы добавляете url для вашего первого субдомена. Для SetHandler вы указываете порт 9002. Остальные директивы также настраивают вашу службу для развертывания PHP 7.0.

      Сохраните и закройте файл.

      Теперь создайте новый файл конфигурации виртуального хоста для сайта site2.your_domain. Для этого субдомена мы будем развертывать PHP 7.2:

      • sudo vi /etc/httpd/conf.d/site2.your_domain.conf

      Добавьте в файл следующее: Убедитесь, что путь к каталогу сайта, имя сервера, порт и версия PHP соответствуют уникальным параметрам вашей системы:

      /etc/httpd/conf.d/site2.your_domain.conf

      <VirtualHost *:80>
           ServerAdmin admin@site2.your_domain
           ServerName site2.your_domain
           DocumentRoot /var/www/site2.your_domain
           DirectoryIndex info.php
           SetHandler "proxy:fcgi://127.0.0.1:9003
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
           AddHandler php72-fcgi .php
           Action php72-fcgi /cgi-bin/php72.fcgi
           ErrorLog /var/log/httpd/site2.your_domain_error.log
           CustomLog /var/log/httpd/site2.your_domain_access.log combined
      </VirtualHost>
      

      Сохраните файл и закройте его после завершения. Проверьте файл конфигурации Apache на наличие синтаксических ошибок:

      • sudo apachectl configtest

      Вы увидите вывод с текстом Syntax OK:

      Output

      Перезапустите службу Apache, чтобы применить изменения:

      • sudo systemctl restart httpd

      Мы настроили Apache для обслуживания каждого из сайтов и теперь протестируем их и убедимся, что на них работают правильные версии PHP.

      Шаг 4 — Тестирование сайтов

      Мы настроили два сайта для работы с двумя разными версиями PHP. Теперь проверим результаты.

      Откройте в браузере сайты http://site1.your_domain и http://site2.your_domain. Вы увидите две страницы, выглядящие следующим образом:

      Информационная страницаPHP 7.0 Информационная страница PHP 7.2

      Обратите внимание на заголовки. На первой странице указано, что на сайте site1.your_domain развернута версия PHP 7.0. На второй странице указано, что на сайте site2.your_domain развернута версия PHP 7.2.

      Мы протестировали сайты и теперь можем удалить файлы info.php. Эти файлы представляют собой угрозу безопасности, поскольку они содержат важную информацию о вашем сервере и при этом доступны неуполномоченным пользователям. Удалите файлы:

      • sudo rm -rf /var/www/site1.your_domain/info.php
      • sudo rm -rf /var/www/site2.your_domain/info.php

      Теперь у вас имеется один сервер CentOS 7, обслуживающий два сайта с двумя разными версиями PHP. Однако PHP-FPM можно применять и для других целей.

      Заключение

      Мы объединили виртуальные хосты и PHP-FPM для обслуживания нескольких сайтов и нескольких версий PHP на одном сервере. Количество сайтов PHP и версий PHP, которые может обслуживать ваш сервер Apache, зависит исключительно от вычислительной мощности сервера.

      Теперь вы можете рассмотреть возможность изучения более расширенных функций PHP-FPM, например порождение процесса или правил регистрации sdtout и stderr​​​​​. Или же теперь вы можете защитить свои веб-сайты. Для этого используйте наш обучающий модуль по защите сайтов с помощью бесплатных сертификатов TLS/SSL от Let’s Encrypt.



      Source link