Multiple php en apache

Apache en Ubuntu 20.04 / 18.04 / 16.04

probado también en Debian10

Esta es una guia para configurar distintas versiones de PHP simultaneamente (probado en APACHE 2 y NGINX) y seleccionar entre ellas desde la creacion del virtualHost o desde .htaccess.

Prerequisitos

Ya debe tener instalados Apache2 o Nginx y funcionando antes de seguir esta guia.

1. Agregar Repositorio

antes que nada deberia actualizar su lista de archivos desde su repositorios

sudo apt update 

En Ubuntu 20.04 y 18.04, con apache instalar libapache2-mod-fcgid.

sudo apt install libapache2-mod-fcgid

Ubuntu 16.04 , instalar libapache2-mod-fastcgi.

sudo apt install libapache2-mod-fastcgi

Instalar tambien software-properties-common

sudo apt install software-properties-common

Agregar el repositorio de PHP de Ondřej’s

sudo add-apt-repository ppa:ondrej/php && sudo apt update

Presione ENTER cuando le pregunte y luego vuelva a actualizar los repositorios si no se realizo automaticamente.

2. Instalar PHP

Usted puede instalar primero las versiones de PHP que requiera para su instalacion en este caso voy a instalar 7.2 y 7.4.

sudo apt install php7.4 php7.4-fpm
sudo apt install php7.2 php7.2-fpm

Una vez instalados va a tener dos nuevos sockets en /var/run/php/.

ls /var/run/php/
total 8
-rw-r--r-- 1 root     root     4 Feb 17 16:50 php7.4-fpm.pid
srw-rw---- 1 www-data www-data 0 Feb 17 16:50 php7.4-fpm.sock
-rw-r--r-- 1 root     root     5 Feb 17 16:51 php7.2-fpm.pid
srw-rw---- 1 www-data www-data 0 Feb 17 16:51 php7.2-fpm.sock

instalando la extensión de MySQL

debe instalar las versiones de mysql que correspondan a su version de php

sudo apt install php7.2-mysql
sudo apt install php7.4-mysql

Otras Extensiones/Librarias

esta lista la arme yo con las librerías que necesita WordPress y Moodle

sudo apt install php7.4-iconv php7.4-mbstring php7.4-curl php7.4-tokenizer php7.4-xmlrpc php7.4-soap php7.4-ctype php7.4-zip php7.4-gd php7.4-simplexml php7.4-dom php7.4-xml php7.4-intl php7.4-json php7.4-xmlreader php7.4-imagick
sudo apt install php7.2-iconv php7.2-mbstring php7.2-curl php7.2-tokenizer php7.2-xmlrpc php7.2-soap php7.2-ctype php7.2-zip php7.2-gd php7.2-simplexml php7.2-dom php7.2-xml php7.2-intl php7.2-json php7.2-xmlreader php7.2-imagick

3. Configurar Apache

Se edita la configuracion para que lea prioritariamente php en lugar de http

  • Con Apache

En Ubuntu 20.04 / 18.04. con apache

sudo nano /etc/apache2/mods-enabled/dir.conf

    DirectoryIndex index.php index.cgi index.pl index.html index.xhtml index.htm

Se agregan los modulos usando a2enmod.

En Ubuntu 20.04 / 18.04.

sudo a2enmod actions alias proxy_fcgi fcgid

En Ubuntu 16.04.

sudo a2enmod actions alias proxy_fcgi fastcgi

Reiniciar Apache.

sudo systemctl restart apache2

Con Nginx

la configuración se realiza toda en el virtualhost

Se pueden usar dos métodos para seleccionar la version de PHP activa en su sitio.
Con Apache puede hacerlos desde la creación del virtualHost o desde el .htaccess
Con Nginx se realiza en la creación del VirtualHost

4. Metodo de Virtual Hosts

APACHE

Edite el archivo de configuración de apache para que use PHP7.2.


     ServerAdmin admin@site1.your_domain
     ServerName site1.your_domain
     DocumentRoot /var/www/site1.your_domain
     DirectoryIndex info.php

     
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
     

    
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    

     ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
     CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined

Reinicie apache

sudo systemctl restart apache2

NGINX

En el archivo de configuracion de su sitio se agrega tanto el orden de carga de archivos, para que busque primero index.php, como las instrucciones de donde encontrar los modulos de PHP

server {
	listen 80;
	listen [::]:80;
	server_name example.com;
	root /var/www/example.com;
	index index.php index.html;
    location / {
	autoindex on;
        try_files $uri $uri/ =404;
    }
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
    location ~ /.ht {
        deny all;
    }
}

5. Metodo .htaccess en Apache

Puede agregar la directiva <FilesMatch> en el archivor .htaccess. Compruebe que AllowOverride este habilitado , sino apache ignorara .htaccess.

En el archivo de configuracion de apache

sudo nano /etc/apache2/apache2.conf

busque hacia abajo para comprobar que  AllowOverride  esta configurado como All.  /etc/apache2/apache2.conf

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Guardar los cambios y salir (press CTRL + X, press Y luego ENTER)

Reinicie Apache.

sudo systemctl restart apache2

Now you can add the  <FilesMatch> directive to .htaccess

Ejemplo con PHP 7.4

.htaccess

<FilesMatch .php>
      # Apache 2.4.10+ can proxy to unix socket SetHandler 
      "proxy:unix:/var/run/php/php7.4-fpm.sock | fcgi://localhost/" 
</FilesMatch>

6. Test PHP

Puede ver que version de php corre en su sitio creando un archivo info.php en la raiz.

en el ejemplo, la rraiz de mi sitio sera /var/www/html/

sudo nano /var/www/html/info.php

ingrese el siguiente texto

<?php phpinfo(); ?>

Guarde el archivo (Presione CTRL + X, presione  Yy luego ENTER)

PHP 7 info test page on Apache and Ubuntu 18.04 Bionic Beaver

quitar repositorios y desinstalar PHP

sudo apt-get purge php7.0-common php7.0-common

o tambien se puede instalar ppa-purge

sudo apt-get install ppa-purge
sudo ppa-purge ppa:ondrej/php-7.0

Otro sitio más de Los Lucero