Cómo configurar varias versiones de php en Apache

Me encanta mi trabajo, porque a pesar de que algunas veces tengo que actuar de picateclas y tirarme horas enteras montando formularios CRUD a BBDD, la mayoría del tiempo no es asi. La mayoría del tiempo me dedico a buscar soluciones para mis clientes y cada día es un reto nuevo.

Hoy tenía que instalar un WordPress en un servidor que ya estaba ejecutando Opencart 1.5 (si, esa… con tropecientos años), pero desarrollé unos módulos especificos hace unos 6 o 7 años y como todo estaba funcionando perfectamente y el cliente ya se había acostumbrado a usarlo, no se había actualizado. El servidor corría php 5.2 asi que cuando me he puesto a instalar WordPress me ha dicho que me metiera el 5.2 por donde amargan los pepinos.

Claro… como iba a poner php 7+ en un ubuntu server 10… así que me toca actualizar el sistema hasta la 16.04.

Una vez actualizado y que he añadido el repositorio para poder instalar la versión 5.6 de php bajo apache, porque el 16.04 trae por defecto la 7, surge el siguiente problema: ¿Como le indico a apache que utilice una versión u otra de php? ¿Puedo escoger la versión según el dominio?

Se puede hacer y es tan sencillo como teclear los siguientes comandos:
sudo apt update
sudo apt install apache2 libapache2-mod-fastcgi


Si tenemos ubuntu 18.04
sudo apt install apache2 libapache2-mod-fcgid

Con el repositorio ya añadido y habiendo hecho un update, instalamos tanto php 5.6 y php 7.3 (o las que nos interesen)
sudo apt install php5.6 php5.6-fpm
sudo apt install php7.3 php7.3-fpm


Ahora debemos activar los módulos necesarios para permitir que corran distintas versiones de php bajo apache, porque si lo hacemos en la consola es tan facil como ejecutar el comando de la versión que deseemos.

sudo a2enmod actions fastcgi alias proxy_fcgi

Para usuarios de Ubuntu 18.04:
sudo a2enmod actions fcgid alias proxy_fcgi

Ya tenemos todo funcionando, pero ahora debemos irnos a la configuración de los sitios de apache e indicarle a cada sitio que versión queremos ejecutar. Para ello, vamos a suponer que tenemos dos dominios: uno llamado misitio56 que queremos que corra php 5.6 y otro llamado misitio73 que va a ejecutar la versión 7.3 y que ambos dominios ya tienen su directorio creado dentro de /var/www

Creamos un fichero con vi llamado por ejemplo: /etc/apache2/sites-available/misitio56.conf y le añadimos las siguientes líneas:

<VirtualHost *:80>
    ServerName miitio56
    DocumentRoot /var/www/misitio56
    <Directory /var/www/misitio56>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

Ahora hacemos los mismo con /etc/apache2/sites-available/misitio73.conf

<VirtualHost *:80>
    ServerName miitio73
    DocumentRoot /var/www/misitio73
    <Directory /var/www/misitio73>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php7.3-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

Ahora solo nos falta activar los dos sitios. Para ello nos dirigimos al directorio sites-available dentro de la configuración de apache y ejecutamos los siguientes comandos:

sudo a2ensite misitio56.conf
sudo a2ensite misitio73.conf

Y por último, reiniciamos apache para que los cambios surjan efecto y ya lo tenemos. Para comprobarlo es tan sencillo como poner phpinfo() dentro de un fichero con extension .php dentro de cada uno de los directorios y llamarlo y así comprobaríamos que versión está ejecutandose.





Como siempre, puedes invitarme a un café o un refresco. Gracias.

, , , , , , , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *