Cómo instalar múltiples versiones de PHP con Nginx¶

PHP es un lenguaje de programación de código abierto, ampliamente utilizado y especialmente diseñado para el desarrollo de sitios web y aplicaciones basadas en la web. Se trata de un lenguaje de scripting del lado del servidor que puede integrarse fácilmente con HTML, lo que lo convierte en una de las tecnologías más populares para la creación de contenido dinámico en Internet.
Actualmente, las versiones oficialmente compatibles de PHP son las 8.1, 8.2 y 8.3, mientras que las versiones anteriores —como PHP 5.x y 7.x— han llegado al fin de su vida útil (EOL) y ya no reciben actualizaciones de seguridad. Por ello, se recomienda utilizar siempre una versión reciente para garantizar un mejor rendimiento, compatibilidad y seguridad.
Para entornos que requieren una gestión avanzada de procesos, PHP puede ejecutarse mediante PHP-FPM (FastCGI Process Manager), una implementación moderna del motor de PHP que ofrece un manejo más eficiente de las solicitudes y un mejor rendimiento en servidores con alto volumen de tráfico. PHP-FPM proporciona características como la gestión de procesos en pools, control granular de recursos y reinicio sin interrupciones, lo que lo convierte en la opción preferida para servidores web de producción.
Antes de instalar PHP, es necesario agregar el repositorio oficial de paquetes. En sistemas basados en Debian, puede utilizarse el repositorio mantenido por Ondřej Surý, ejecutando el siguiente comando:
💡 Los repositorios ahora contienen PHP 5.6, PHP 7.0-7.4 y PHP 8.0-8.3, que se pueden instalar juntos.
apt -y install lsb-release ca-certificates curl
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update
Una vez que el repositorio esté actualizado, instale PHP 7.4, PHP 8.3 y PHP-FPM con el siguiente comando:
apt-get install php7.4 php7.4-fpm php8.3 php8.3-fpm -y
copiar Una vez que se haya completado la instalación, verifique el estado de PHP-FPM con el siguiente comando:
systemctl status php7.4-fpm
systemctl status php8.3-fpm
Crear múltiples sitios web con PHP¶
Cree directorios para cada subdominio
mkdir /var/www/html/site1.dominio.edu.ar
mkdir /var/www/html/site2.dominio.edu.ar
A continuación, cree un archivo de muestra para el sitio1: /var/www/html/sitio1.dominio.edu.ar/index.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Hola, usuario de Nginx - Sitio1</title>
</head>
<body>
<h1>Hola, usuario de Nginx - Sitio1</h1>
<?php
phpinfo();
?>
</body>
</html>
Ahora cree un archivo de muestra para el sitio2: /var/www/html/sitio2.dominio.edu.ar/index.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Hola, usuario de Nginx - Sitio2</title>
</head>
<body>
<h1>Hola, usuario de Nginx - Sitio2</h1>
<?php
phpinfo();
?>
</body>
</html>
Luego, cambie la propiedad de ambos sitios web a datos www:
chown -R www-data:www-data /var/www/html/sitio1.dominio.edu.ar
chown -R www-data:www-data /var/www/html/sitio2.dominio.edu.ar
Configurar nginx¶
A continuación, deberá crear un archivo de bloque de servidor Nginx para sitio1.dominio.edu.ar que usa PHP 8.3. Y otro para sitio2.dominio.edu.ar que usa PHP 7.4.
En /etc/nginx/sites-available/site1.dominio.edu.ar.conf agregue las siguientes líneas:
server {
listen 80;
root /var/www/html/sitio1.dominio.edu.ar/;
index index.php;
server_name sitio1.dominio.edu.ar;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Ahora, en /etc/nginx/sites-available/site2.dominio.edu.ar.conf agregue
server {
listen 80;
root /var/www/html/sitio2.dominio.edu.ar/;
index index.php;
server_name sitio2.dominio.edu.ar;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Luego, habilite ambos archivos de host virtuales con el siguiente comando:
ln -s /etc/nginx/sites-available/sitio1.dominio.edu.ar.conf /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/sitio2.dominio.edu.ar.conf /etc/nginx/sites-enabled/
Finalmente, reinicie el servicio NGINX y PHP-FPM para aplicar todos los cambios de configuración:
systemctl restart nginx
systemctl restart php8.3-fpm
systemctl restart php7.4-fpm
Con información de blog.containerize.com