Saltar al contenido

Instalación de Multi-PHP con selección por .htaccess en Debian 13

En esta guía aprenderás a configurar un servidor Debian 13 para ejecutar múltiples versiones de PHP simultáneamente, permitiendo que cada sitio web (o incluso carpetas específicas) elija su versión de PHP mediante el archivo .htaccess. Esto es ideal para sitios en transición o aplicaciones con requisitos de compatibilidad antiguos (como PHP 7.4).


1. Instalación de Repositorios y Versiones de PHP

Debian 13 no incluye versiones antiguas de PHP por defecto. Utilizaremos el repositorio de Ondřej Surý, que es el estándar de oro para PHP en Debian.

Paso A: Agregar el repositorio

Bash

sudo apt update
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg
curl -sS https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(ls_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update

Paso B: Instalación de PHP y extensiones para WordPress

Para que WordPress funcione correctamente, no solo instalamos el motor (fpm), sino también las extensiones de base de datos, imágenes y compresión.

Para PHP 7.4:

Bash

sudo apt install -y php7.4-fpm php7.4-mysql php7.4-common php7.4-gd php7.4-mbstring php7.4-xml php7.4-curl php7.4-zip php7.4-imagick php7.4-intl

Para PHP 8.4:

Bash

sudo apt install -y php8.4-fpm php8.4-mysql php8.4-common php8.4-gd php8.4-mbstring php8.4-xml php8.4-curl php8.4-zip php8.4-imagick php8.4-intl

2. Preparación de Apache

Para que el .htaccess tenga el control, debemos activar los módulos de comunicación y desactivar cualquier configuración global que fuerce una versión única.

Paso A: Activar módulos necesarios

Bash

sudo a2enmod proxy_fcgi setenvif rewrite headers

Paso B: Desactivar configuraciones rígidas (Muy importante)

Debian activa automáticamente la configuración de la versión más reciente. Debemos desactivarla para que no ignore nuestras instrucciones del .htaccess:

Bash

sudo a2disconf php7.4-fpm
sudo a2disconf php8.4-fpm
sudo systemctl restart apache2

3. Configuración del VirtualHost (Puerto 80 y 443)

Si utilizas SSL (Certbot), tendrás dos archivos de configuración. Debes editar ambos para permitir que el archivo .htaccess funcione.

  1. Edita el archivo normal: /etc/apache2/sites-available/tusitio.conf
  2. Edita el archivo SSL: /etc/apache2/sites-available/tusitio-le-ssl.conf

Añade este bloque dentro de cada <VirtualHost>:

Apache

<Directory "/var/www/html/tu-proyecto/public_html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Nota: Sin AllowOverride All, Apache ignorará tu .htaccess y plugins como Hide My WP no podrán cargar estilos CSS.


4. Selección de Versión en el .htaccess

Ahora, simplemente crea o edita el archivo .htaccess en la carpeta de tu sitio web. Añade las siguientes líneas al principio del archivo según la versión que necesites.

Para usar PHP 7.4:

Apache

<FilesMatch "\.php$">
    SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>

Para usar PHP 8.4:

Apache

<FilesMatch "\.php$">
    SetHandler "proxy:unix:/var/run/php/php8.4-fpm.sock|fcgi://localhost"
</FilesMatch>

5. Cuidados y Solución de Errores Comunes

A. Error de ruta del Socket

Asegúrate de que la ruta sea /var/run/php/phpX.X-fpm.sock. Si el archivo no termina exactamente en .sock o la ruta es incorrecta, recibirás un error 503 Service Unavailable.

B. El sitio se ve sin estilos (CSS roto)

Esto ocurre usualmente por dos razones:

  1. No habilitaste el módulo headers (sudo a2enmod headers).
  2. No agregaste el bloque <Directory> con AllowOverride All en el archivo de configuración SSL (-le-ssl.conf).

C. Permisos de carpeta

Si el servidor no puede escribir archivos, asegúrate de que el usuario www-data sea el dueño de la carpeta:

Bash

sudo chown -R www-data:www-data /ruta/a/tu/web/

D. Verificación rápida

Crea un archivo llamado info.php con el contenido <?php phpinfo(); ?>. Cámbialo de versión en el .htaccess y refresca el navegador. Si la versión cambia sin reiniciar Apache, ¡tu configuración es un éxito!

Declaración de uso de IA generativa: Se empleó Gemini Flash para redactar el procedimiento que puse en práctica para solucionar un caso real.

Publicado enInformáticaManuales