Si te encuentras en el escenario de tener diferentes aplicaciones PHP bajo un mismo Apache y necesitas cambiar la versión de una de ellas, antes de barajar el uso de varios servidores con configuraciones de proxies enrevesadas o contratar un nuevo alojamiento, vamos a ver cómo de una manera sencilla podemos hacer servir varias versiones PHP bajo un mismo servidor Apache.
¿Qué es PHP-FPM?
Cada vez que Apache recibe la orden de gestionar un archivo PHP, éste utiliza unos procesos llamados handlers, o manejadores en español. Estos Apache Handlers serán los encargados de conectar con el intérprete PHP para que realice las operaciones correspondientes. Existen varios tipos de handlers, cada uno con sus ventajas e inconvenientes, pero nos vamos a centrar en uno de los más utilizados actualmente, PHP-FPM.
FPM, o FastCGI Process Manager, se trata de una implementación de otro handler, FastCGI, con el fin de aportar un mayor número de características que permitan optimizar el rendimiento de cara a aplicaciones con alto tráfico.
Una vez tenemos una pequeña idea de lo que es esto de PHP-FPM, vamos a configurar nuestro Apache HTTP Server tradicional con PHP, para que sirva procesos basados en FPM para cada aplicación teniendo en cuenta que vamos a tener diferentes versiones del lenguaje.
Cómo instalar y configurar Apache HTTPS Server con PHP-FPM utilizando varias versiones
Introducción
Damos por supuesto que tenemos ya instalado Apache HTTP Server con dos virtual hosts configurados, sitioA.conf y sitioB.conf. Por ejemplo el virtual host del primero sería tal que así:
<VirtualHost *:8001> ServerName localhost ServerAdmin admin@sitioA.localhost DocumentRoot /var/www/html/sitioA <Directory /app/sitioA> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/sitioA.error.log CustomLog ${APACHE_LOG_DIR}/sitioA.access.log combined </VirtualHost>
Para el sitioB tendríamos un virtual host similar con puerto 8002 y ruta /var/www/html/sitioB.
Instalación del paquete ondreh/php
Este paquete nos permite tener instaladas varias versiones de PHP.
sudo apt update -qy && apt install -qy software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update -qy && apt install -qy php7.4 php7.4-common php7.4-dev php8.1 php8.1-common php8.1-dev
Si fuera necesaria cualquier tipo de librería php tanto para la versión 7.4 como para la versión 8.1, la instalaríamos con APT siguiendo la misma dinámica anterior.
Instalación de paquetes PHP-FPM y librerías auxiliares para Apache2
sudo apt update -qy && apt install -qy php7.4-fpm php8.1-fpm libapache2-mod-php7.4 libapache2-mod-php8.1 libapache2-mod-fcgid
Activar los servicios PHP-FPM
sudo service php7.4-fpm start sudo service php8.1-fpm start
Añadir módulos a Apache2
sudo a2enmod actions fcgid alias proxy_fcgi setenvif sudo service apache2 restart
Añadir fragmento de código a VirtualHosts
<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/phpX.X-fpm.sock|fcgi://localhost" </FilesMatch>
Sobreescribiendo X.X por la versión de PHP a utilizar en cada caso, en nuestro caso 7.4 y 8.1.
Volver a reiniciar Apache
sudo service apache2 restart
Bibliografía
Imagen de portada generada con Midjourney AI