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.confDirectoryIndex 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 Y
y luego ENTER
)

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