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.
- Edita el archivo normal:
/etc/apache2/sites-available/tusitio.conf - 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.htaccessy 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:
- No habilitaste el módulo
headers(sudo a2enmod headers). - No agregaste el bloque
<Directory>conAllowOverride Allen 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.