Most of the host manager used a separate server for each PHP version application deployment. Which increases the hosting cost. Some of the host managers are using Docker to run multiple PHP version on the single server. Here I will describe the installation and configuration of two VirtualHost on Apache with separate PHP versions. First VirtualHost will work with PHP 5.6 and another VirtualHost will run with PHP 7.2.
Install Apache web server from the official repository. Launch terminal on your system or login with ssh for remote systems. Execute the following commands to install the latest available version of Apache web server.
sudo apt update
sudo apt install apache2 libapache2-mod-fastcgi
Ubuntu 18.04 Users:
sudo apt install apache2 libapache2-mod-fcgid
For the installation of PHP versions, we use the PPA maintained here. Use the below couple of commands to add the PPA to your system.
## On Ubuntu 18.04
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
To use the multiple PHP versions, we will use PHP FPM and FastCGI. Let’s install the following packages on your system.
sudo apt install php5.6 php5.6-fpm
sudo apt install php7.2 php7.2-fpm
After installation, php-fpm services will be started automatically. Use the following commands to make sure both services are running.
sudo systemctl status php5.6-fpm
sudo systemctl status php7.2-fpm
Now enable few modules required for the configuration of multiple PHP versions with Apache. These modules are necessary to integrate PHP FPM and FastCGI with Apache server.
sudo a2enmod actions fastcgi alias proxy_fcgi
Ubuntu 18.04 Users:
sudo a2enmod actions fcgid alias proxy_fcgi
Ready the configuration of websites on your Apache server. For the testing purpose, I am configuring two websites to work with two different-2 PHP versions. First, create two directories on your server.
sudo mkdir /var/www/php56
sudo mkdir /var/www/php72
Now, create a file index.php containing the phpinfo() function.
echo "<?php phpinfo(); ?>" > /var/www/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/php72/index.php
Now create VirtualHost. Apache keeps all the VirtualHost configuration files under /etc/apache2/sites-available with the extension .conf. Create a file for the first virtual host and edit in your favorite text editor.
sudo nano /etc/apache2/sites-available/php56.example.com.conf
Add the following content. Make sure to use correct ServerName and directory path according to your setup. This website is configured to work with PHP 5.6.
Similarly, create a second VirtualHost configuration file to work with PHP 7.2. Just replace 5.6 with 7.2.
Both of the websites are configured now. But they are still not active. Apache keeps active sites under /etc/apache2/sites-enabled directory. You can simply create a symbolic link of config files to this directory or use below command to do the same.
sudo a2ensite php56.example.com
sudo a2ensite php72.example.com
After making all the changes restart Apache to reload new settings changes.
sudo systemctl restart apache2
Your setup has been completed now.
Edit Host File
Edit /etc/hosts file on your local system and make an entry like below. This will resolve temprory names to localhost IP address.
sudo nano /etc/hosts
Add following entry to end of file
Open a web browser and visit both of the sites. You will see that php56.example.com shows the version PHP 5.6 and php72.example.com is showing the PHP 7.2 as the configuration.
Thank you for reading this article.