Recientemente compré el complemento EduExpression WordPress para que un cliente configurara un software de examen. Pude instalar y configurar el complemento sin muchos problemas. Sin embargo, el problema comenzó a ocurrir cuando se accedió al inicio de sesión del estudiante:la página del complemento quedó en blanco cuando el estudiante intentó realizar un examen. Bueno, tengo un apoyo, ¿verdad? Me puse en contacto con el equipo de soporte y me dijeron que el complemento no funciona con PHP 7.1 y solo es compatible con PHP 5.6. Ese es mi error, porque tenía mi servidor configurado con PHP 7.1 y todo el sitio web de mi cliente se ejecuta en PHP 7.1. Ahora, para que EduExpression funcione, necesito configurar la versión PHP 5.6. Degradar PHP nunca es una buena opción, pero tuve que hacer esto para que este complemento funcionara para el cliente. Entonces, ¿qué tal configurar PHP 5.6 solo para un dominio en particular y dejar que el resto se ejecute en PHP 7.1? Bueno, en este tutorial explicaré cómo configurar varias versiones del entorno PHP y vincular una versión específica de PHP con un dominio particular en NGINX.
MedioambienteSO:CentOS 7, servidor web:Nginx, PHP:v7.1 (predeterminado), PHP FastCGI:PHP-FPM
Nota:el entorno anterior ya está configurado y funcionando correctamente.
Aquí uso yum
comando para instalar varias versiones de PHP junto con los módulos necesarios como se muestra a continuación:
Instalando la versión 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
Instalar PHP-FPM para la versión PHP 5.6
PHP en Nginx funciona a través de PHP-FPM (administrador de procesos FastCGI). PHP-FPM es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente para sitios más concurridos.
# yum install php56-php-fpm
Bueno, hemos instalado PHP 5.6, pero debemos asegurarnos de que la versión predeterminada de PHP siga siendo 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
Configurar PHP-FPM y PHP56-PHP-FPM
La parte más importante de este tutorial es configurar dos PHP-FPM diferentes para dos versiones de PHP. Aquí configuraremos dos versiones diferentes de PHP-FPM con las que trabajará Nginx. Lo principal durante la configuración es el usuario/grupo de procesos FastCGI y los puertos en los que escuchan.
Archivo de configuración de PHP-FPM (predeterminado 7.1)/etc/php-fpm.d/www.conf
Asegúrese de que el usuario/grupo esté configurado en nginx
(El valor predeterminado es apache).
user = nginx group = nginx
Busque el parámetro de escucha y configúrelo en el puerto 9000 en el que se recibirán las solicitudes FastCGI.
listen = 127.0.0.1:9000 [php-fpm]Archivo de configuración PHP56-PHP-FPM
/opt/remi/php56/root/etc/php-fpm.d/www.conf
Asegúrese de que el usuario/grupo establezca nginx
(El valor predeterminado es apache).
user = nginx group = nginx
Busque el parámetro de escucha y configúrelo en el puerto 9001 en el que se recibirán las solicitudes FastCGI.
listen = 127.0.0.1:9001 [php56-php-fpm]
Habilitar PHP-FPM, PHP56-PHP-FPM y NGINX inicio automático en el arranque del sistema en CentOS 7
Después de completar las configuraciones anteriores, debe habilitar PHP-FPM, PHP56-PHP-FPM y Nginx para que se inicien automáticamente en el arranque del sistema.
# systemctl enable nginx # systemctl enable php-fpm # systemctl enable php56-php-fpmDesactivar SELinux
#sudo setenforce 0
Configurar dominios con PHP-FPM correspondiente para ejecuciones de PHP
Abra el archivo de configuración de dominio correspondiente de Nginx (/etc/nginx/conf.d/
) y busque la línea fastcgi_pass
y cámbielo en consecuencia para vincular la versión correcta de PHP que debe ejecutar.
Archivo de configuración Nginx del dominio 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; } }
Archivo de configuración Nginx del dominio 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; } }
Revise los archivos de configuración de Nginx para ver si hay errores de sintaxis antes de reiniciar Nginx
# nginx -t
Reiniciar Nginx, PHP-fpm, PHp56-PHP-FPM
# systemctrl restart nginx, php-fpm php56-php-fpm
Prueba diferentes versiones de PHP para diferentes dominios
Crear diferentes phpinfo
archivos en el directorio raíz de dos dominios diferentes
# echo "<?php phpinfo(); ?>" > /home/example1/public_html/info.php # echo "<?php phpinfo(); ?>" > /home/example2/public_html/info.php
Ahora abre info.php
en el navegador para verificar example1.com usando PHP 7.1 y example2.com usando PHP 5.6.
http://example1.com/info.php
http://example2.com/info.php
¡Eso es todo! Acabo de implementar el complemento EduExpression en example2.com que se ejecuta en PHP 5.6.