Deploy websites with multiple versions of PHP in Apache in Ubuntu 14.04 , Ubuntu 16.04 and Ubuntu 18.04 LTS.
Run Multiple versions of PHP in parallel using Apache in Ubuntu 14.04,16.04,18.04, this article also cover installing Apache and php along with configuring virtual host in ubuntu system
We might run it to situation where we need to upgrade our environment to newer version of PHP to test our web application or we might work on different version for different application so this article will guide to have multiple web apps with different version of php running at same time without switching out different version.
We shall proceed with installing Apace web server as our server.
For Ubuntu 14.04 LTS
sudo apt-add-repository ppa:ondrej/apache2
sudo apt-get update
sudo apt install apache2 libapache2-mod-fastcgi
sudo apt-get dist-upgrade
For Ubuntu 16.04 LTS
sudo apt update
sudo apt install apache2 libapache2-mod-fastcgi
For Ubuntu 18.04 LTS
sudo apt update
sudo apt install apache2 libapache2-mod-fcgid
After installing Apache we can proceed installing PHP.
sudo apt install python-software-properties
sudo add-apt-repository ppa:ondrej/php
apt update
sudo apt install php5.6 php5.6-fpm
sudo apt install php7.2 php7.2-fpm
So to run multiple version of PHP we make use of PHP-FPM mod and Fast-cgi like how ngnix serve php websites.so the next step is to configure apace to make use of FPM mod to serve php files.
For Ubuntu 14.04 and 16.04 LTS
sudo a2enmod actions fastcgi alias proxy_fcgi
For Ubuntu 18.04 LTS
sudo a2enmod actions fcgid alias proxy_fcgi
And Apache configurations for sites to serve different version of php as follows.
Create config file for PHP 5.6 with below command
sudo nano /etc/apache2/sites-available/php56.example.com.conf
And paste the below configuration in the file and save.
<VirtualHost *:80>
ServerName {your domain}
DocumentRoot /var/www/php56
<Directory /var/www/php56>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
And for PHP 7.2
sudo nano/etc/apache2/sites-available/php7.2.example.com.conf
And content of the configuration file
<VirtualHost *:80>
ServerName {your domain}
DocumentRoot /var/www/php72
<Directory /var/www/php72>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
And we shall proceed creating the test PHP file to check and verify the configuration and enable the site created for configuration.
mkdir /var/www/php56
mkdir /var/www/php72
echo "<?php phpinfo(); ?>" > /var/www/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/php72/index.php
sudo a2ensite php56.example.com
sudo a2ensite php72.example.com
sudo systemctl restart apache2
And finally make the entry of the server name in /etc/hosts and open a browser and naviage to domain to see the php info displayed.