Cómo ejecutar varios sitios web con diferentes versiones de PHP en Nginx


A veces, los desarrolladores de PHP desean crear y ejecutar diferentes sitios web/aplicaciones utilizando diferentes versiones de PHP en el mismo servidor web. Como administrador del sistema Linux, debe configurar un entorno donde pueda ejecutar varios sitios web utilizando diferentes versiones de PHP en un solo servidor web, es decir, Nginx .

En este tutorial, le explicaremos cómo instalar varias versiones de PHP y configurar el servidor web Nginx para trabajar con ellos a través de los bloques de servidores (hosts virtuales en Apache) Distribuciones de CentOS/RHEL 7 utilizando la pila de LEMP .

Nginx utiliza PHP-FPM (significa FastCGI Process Manager ), que es una implementación alternativa de PHP FastCGI con algunos Funciones extra, útiles para sitios web muy cargados.

  1. A CentOS 7 or RHEL 7 server with minimal installation.
  2. Nginx HTTP Server.
  3. PHP 7.1 (to be used as default version) and 5.6.
  4. MariaDB Database Server.
  5. Server IP address: 192.168.56.10.
  6. Websites: example1.com and example2.com.

Paso 1: Instalación y habilitación de EPEL y Remi Repository

1. Comience primero instalando y habilitando el EPEL y Remi , que ofrece las últimas versiones de PHP apilar en CentOS/RHEL 7 distribuciones.

# 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. A continuación, instale el paquete yum-utils , que amplía las funcionalidades nativas de yum y proporciona el comando yum-config-manager , que se utiliza para habilitar o deshabilitar los repositorios de Yum en el sistema.

# yum install yum-utils

rojo

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

Paso 2: Instalar el servidor web Nginx

3. Para instalar la última versión de Nginx, debemos agregar el repositorio oficial de Nginx, crear un archivo llamado /etc/yum.repos.d/nginx.repo .

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

Agregue las siguientes líneas al archivo según su distribución.

--------------- 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. Una vez que se haya agregado nginx repo, puedes instalar Nginx usando la herramienta yum package manager tool como se muestra.

# yum install nginx

Paso 3: Instalación del servidor de base de datos MariaDB

5. Para instalar la última versión de MariaDB, debemos agregar el repositorio oficial de MariaDB, crear un archivo llamado /etc/yum.repos.d/mariadb.repo .

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

Agregue las siguientes líneas al archivo según su distribución.

--------------- 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. Una vez que se haya agregado el repositorio de MariaDB, puedes instalar MariaDB usando la herramienta yum package manager tool como se muestra.

# yum install MariaDB-client MariaDB-server

7. Luego, asegure la instalación del servidor de la base de datos utilizando el siguiente script. Establezca una contraseña de root y responda y y presione [Enter] para el resto de las preguntas subsiguientes para deshabilitar el inicio de sesión del usuario root remoto, eliminar cuentas de usuarios anónimos y probar la base de datos que, por Todos los usuarios pueden acceder a la configuración predeterminada, incluso a los usuarios anónimos.

# mysql_secure_installation

Paso 4: Instalando múltiples versiones de PHP

8. Para instalar diferentes versiones de PHP para sus proyectos, use el comando yum-config-manager para instalar varias versiones de PHP junto con la mayoría de los módulos requeridos, como se muestra.

# 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
# 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. Una vez instalado PHP, puede usar el siguiente comando para verificar la versión predeterminada de PHP utilizada en su servidor.

# php -v

Paso 5: Configuración de PHP-FPM y PHP56-PHP-FPM

10. Esta es la parte más interesante de este tutorial, ya que explica cómo puedes ejecutar múltiples versiones de PHP en tu servidor. Aquí, configurará las diferentes versiones de php-fpm con las que Nginx funcionará. Debe definir el usuario/grupo de los procesos FastCGI, así como los puertos que escucharán.

Estos son los siguientes dos archivos de configuración que editará.

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

Abra los archivos de arriba, establezca el usuario/grupo de procesos 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] 

Los valores predeterminados deben ser apache , cámbielos a nginx como se muestra.

user = nginx
group = nginx

11. A continuación, busque los parámetros de escucha y defina la dirección: puerto en la que se recibirán las solicitudes de FastCGI.

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

12. Una vez realizada toda la configuración anterior, debe iniciar y habilitar Nginx , MariaDB y PHP-FPM para iniciar automáticamente en el arranque del sistema.

# 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 

rojo

# getenforce
# setenforce 0 

Paso 6: Configurar sitios web con permisos

13. En este punto, ahora puede crear los directorios necesarios para sus sitios web en /var/www/html/. También necesita crear directorios para almacenar registros de la siguiente manera:

---------------- 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. Establezca los permisos de propiedad adecuados en todos los directorios.

---------------- 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/

Paso 7: Configurar los bloques del servidor Nginx para sitios web

15. Ahora configure cómo Nginx procesará las solicitudes a sus sitios web utilizando los archivos de configuración del bloque del servidor, que deben estar ubicados en /etc/nginx/conf.d/ .

Cree los archivos de configuración para sus sitios web que terminen con la extensión .conf .

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

Luego pegue las siguientes configuraciones de bloque de servidor en los archivos respectivos.

Configuración para example1.com

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;

        }
}

Configuración para example2.com

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. Asegúrese de tener la siguiente línea en la parte de cierre del bloque http en /etc/nginx/nginx.conf . Es útil incluir todos los archivos de configuración dentro del directorio /etc/nginx/conf.d/ cuando se está ejecutando Nginx.

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

Paso 8: Probando diferentes versiones de PHP

17. Finalmente, debes probar que tu servidor está usando las dos versiones de PHP. Puede crear un script info.php muy básico en los directorios de raíz de documentos de sus sitios web como se muestra.

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

18. Para aplicar todos los cambios que has realizado anteriormente, debes reiniciar Nginx , php-fpm y php56-php- fpm . Pero en primer lugar, puede verificar que los archivos de configuración de Nginx no tengan errores de sintaxis antes de hacerlo.

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

19. Hay otra última cosa que hacer, especialmente si está ejecutando su servidor localmente, necesita configurar el DNS local usando el archivo /etc/hosts como se muestra en la captura de pantalla de abajo.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Finalmente, abra un navegador web y escriba las siguientes direcciones para verificar las versiones de PHP instaladas en el sistema.

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

¡Eso es! Ahora puedes desplegar archivos y probar sitios web con diferentes versiones de PHP. Si tiene alguna adición o pregunta que hacer, haga uso del formulario de comentarios a continuación.