Facebook Twitter Instagram
    TecAdmin
    • Home
    • FeedBack
    • Submit Article
    • About Us
    Facebook Twitter Instagram
    TecAdmin
    You are at:Home»Linux Distributions»Ubuntu»How to Configure Multiple PHP Versions with Apache on Ubuntu

    How to Configure Multiple PHP Versions with Apache on Ubuntu

    By RahulJanuary 27, 20234 Mins Read

    Generally, 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 versions on a single server. Also, most of you are aware of the configuration, I used in this tutorial. But some of the system administrators are not aware of this. This tutorial will help you to install multiple PHP version with Apache on Ubuntu 22.04, 20.04, and 18.04 LTS systems without switching PHP versions.

    Advertisement

    This tutorial describes the installation and configuration of two VirtualHost on Apache with separate PHP versions. First VirtualHost will work with PHP 8.1 and another VirtualHost will run with PHP 7.4. So just go through this tutorial. You can also use more than two PHP versions with Apache as required but this tutorial covers two only.

    Installing Apache2

    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 the Apache webserver.

    sudo apt update 
    sudo apt install apache2 libapache2-mod-fcgid
    

    Now enable a few modules required for the configuration of multiple PHP versions with Apache. These modules are necessary to integrate PHP FPM and FastCGI with the Apache server.

    sudo a2enmod actions fcgid alias proxy_fcgi
    

    Installing PHP Versions

    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.

    sudo apt install software-properties-common
    sudo add-apt-repository ppa:ondrej/php
    

    For this tutorial, we are using PHP 8.1 and PHP 7.4 to configure with the Apache webserver. To use the multiple PHP versions, we will use PHP FPM and FastCGI. Let’s install the following packages on your system.

    sudo apt update
    sudo apt install php8.1 php8.1-fpm
    sudo apt install php7.4 php7.4-fpm
    

    After installation, php-fpm services will be started automatically. Use the following commands to make sure both services are running.

    sudo systemctl status php8.1-fpm
    sudo systemctl status php7.4-fpm
    
    • You may like: How to Enable/Disable PHP Modules on Ubuntu

    Configuring Apache Virtual Hosts

    Get ready for 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/php81
    sudo mkdir /var/www/php74
    

    Create an index.php file containing the phpinfo() function.

    echo "" | sudo tee -a /var/www/php81/index.php
    echo "" | sudo tee -a /var/www/php74/index.php
    

    Let’s start the creation of 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 vim /etc/apache2/sites-available/php81.example.com.conf
    

    Add the following content. Make sure to use the correct ServerName and directory path according to your setup. This website is configured to work with PHP 8.1.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <VirtualHost *:80>
        ServerName php81.example.com
        DocumentRoot /var/www/php81
        <Directory /var/www/php81>
            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/php8.1-fpm.sock|fcgi://localhost"
        </FilesMatch>
    </VirtualHost>

    Similarly, create a second VirtualHost configuration file to work with PHP 7.4. Edit configuration file in text editor:

    sudo vim /etc/apache2/sites-available/php74.example.com.conf
    

    Add the following content to file with proper ServerName and DocumentRoot.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <VirtualHost *:80>
        ServerName php74.example.com
        DocumentRoot /var/www/php74
        <Directory /var/www/php74>
            Options -Indexes +FollowSymLinks +MultiViews
            AllowOverride All
            Require all granted
        </Directory>
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>
    </VirtualHost>

    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 the below command to do the same.

    sudo a2ensite php81.example.com
    sudo a2ensite php74.example.com
    

    After making all the changes restart Apache to reload new settings changes.

    sudo systemctl restart apache2
    

    Your setup has been completed now. Go to the next step to test your setup.

    Test Setup

    Edit /etc/hosts file on your local system and make an entry like below. This will resolve temprory names to localhost IP address.

    sudo vim /etc/hosts
    

    Add following entry to end of file

    127.0.0.1     php81.example.com
    127.0.0.1     php74.example.com
    

    Open a web browser and visit both of the sites. You will see that php81.example.com shows the version PHP 8.1 and php74.example.com is showing the PHP 7.4 as the configuration.

    • http://php81.example.com
      Configure Multiple PHP Version with Apache on Ubuntu
      PHP 8.1 with Apache
    • http://php74.example.com
      Configure Multiple PHP Version with Apache on Ubuntu
      PHP 7.4 with Apache

    Conclusion

    This tutorial helped you to install and configure multiple PHP versions with Apache on the Ubuntu Linux system. That provides you with a cost-effective solution to deploy different PHP version applications on a single web server.

    Apache FastCGI install php PHP php-fpm
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email WhatsApp

    Related Posts

    Installing PHP on Pop!_OS

    How to Install PHP 8.x on Pop!_OS

    Managing Dependencies with Composer: A Beginner’s Guide

    CodeIgniter Remove index.php Using .htaccess

    View 47 Comments

    47 Comments

    1. cesar on July 10, 2021 5:00 pm

      Excelente… Funcionanado en Deepin 20.2

      Reply
    2. Josef on May 9, 2021 7:40 am

      This was a really nice tutorial, thanks.

      You should also add how to undoing changes. On my case, I only needed an older php version to upgrade an old application that didn’t supported the latest official php version from Ubuntu. So, I upgraded, then afterwards, I didn’t need the old php version. I just went for the easy way:

      1. Check if your application works with the installed version from Ubuntu, for this, remove the FilesMatch directive from apache, restart it and access your website.
      You may also create a index2.php file as follows:
      echo “” > /var/www/your_document_root/index.php
      Then check that you are running the official Ubuntu version.

      2. Then you can proceed to remove the ondrej/php repositories. There are several ways of doing this; however, I took the easy way, which was to use the “ppa-purge” tool:
      sudo apt-get install ppa-purge
      sudo ppa-purge ppa:ondrej/php

      3. Look for the repository key:
      sudo apt-key list

      search: ondrej/php

      4. Optional: you may delete that key by running:
      sudo apt-key del “long_40_char_hex_here”

      5. Check if the key was removed:
      apt-key list | grep ondrej

      6. Restart apache and check that your site is using the php version from Ubuntu by showing: index2.php in the browser

      7. Delete index2.php

      That’s all I did and it worked.

      Thanks again for the tutorial

      Best regards
      Josef

      Reply
      • Josef on May 9, 2021 7:46 am

        I don’t know why, but some of my code was removed. And I also realized that something was wrong:
        echo “… php phpinfo(); … ” > /var/www/your_document_root/index2.php

        Replace it by the code from this post. By the way, My mistake on the previous command: I was overriding index.php, but that wasn’t what I wanted; it may break the php application, so, a better way is to create a second file: index2.php

        Reply
    3. RYANB on January 3, 2021 8:43 pm

      THanks for the tutorial, it works on me (Ubuntu 20.04).

      but when i type php –version in terminal , it show that php 7.4 is active, did you know how to switch this to 5.4 ? thanks.

      Reply
    4. peter park on December 31, 2020 5:30 am

      Thanks

      but

      How do I solve mysql and mysqli problems?

      Reply
    5. Gonzalo on October 4, 2020 2:30 pm

      Thank you very much from Chile.

      Reply
    6. Mathieu CABARET on April 25, 2020 1:07 pm

      For Ubuntu 18.04 users, first part of PHP installation should be :
      sudo apt install software-properties-common
      sudo add-apt-repository ppa:ondrej/php

      rather than :
      sudo apt install python-software-properties
      sudo add-apt-repository ppa:ondrej/php

      Reply
      • Rahul on April 26, 2020 3:41 am

        Thanks Mathieu, I have updated tutorial accordingly.

        Reply
    7. Erick Carvajal on January 30, 2020 8:36 pm

      Nice, How i can use this tutorial to install with mysql + phpmyadmin without errors?

      Reply
    8. Yv on January 22, 2020 10:35 am

      Cannot get it work. It shows plain text content of index.php:
      <?php
      phpinfo();

      Can you help please?

      Reply
      • Rahul on January 27, 2020 9:02 am

        Hi Yv,

        Make sure the socket path in Apache “/var/run/php/php7.2-fpm.sock” is set to the correct version you have installed.

        Reply
    9. Sebastian Czerniak on September 5, 2019 2:13 pm

      There is an mistake in virtualhost file in line below:

      SetHandler “proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/”

      Should be with no slash after localhost:

      SetHandler “proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost”

      Otherwise $_SERVER[‘SCRIPT_FILENAME’] will be set with leading two slashes.

      Reply
      • Rahul on November 21, 2019 3:51 am

        Hi Sebastian,

        Thanks for valuable information. I have corrected our tutorials accordingly.

        Reply
    10. Samuel on August 29, 2019 3:45 pm

      I love you! haha

      Reply
    11. Mike on July 17, 2019 10:30 pm

      Brilliant – been wondering how to do this for years
      Easy solution
      Thanks very much

      Reply
    12. David Hay on May 8, 2019 1:22 am

      Thanks man, been struggling with a nice automated setup for my dev environment, now having php version in conf is so clean! I tried a few different methods, but this one worked first time. Thanks again, Dave.

      Reply
    13. Lukas on April 30, 2019 4:56 pm

      Good job man, thank you a lot 🙂

      Reply
    14. Marco on April 25, 2019 9:43 pm

      I’ve follow those steps but i’m getting a “503 Service Unavailable” error. Why es that?

      Reply
    15. Ryan on April 10, 2019 7:46 pm

      I’ve followed these instructions before on one server and it worked but now I’m trying on a different server and the php for version 7.2 is being rendered in the browser. Any idea why that would be happening?

      Reply
    16. treminaor on March 24, 2019 4:47 pm

      This worked perfectly on my Ubuntu 16.04 server. If you want to control your PHP version on a per-directory basis instead of using VirtualHosts you can add this to an .htaccess file in a directory you want to specify a non-default PHP version:

      # Apache 2.4.10+ can proxy to unix socket
      SetHandler “proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/”

      I needed php5.6 in my example but you need to change the version number to what you installed.

      Reply
    17. Ejoo on March 11, 2019 9:52 pm

      I was looking for this and finally found it here! Thanks a lot, saved my day (night to be exact 😉 ). I did it just the same way with v7.1 and v7.3, works fine
      For Hersdyanata: I missed the line with “sudo a2enmod actions fcgid alias proxy_fcgi” and had just white pages (module proxy_fcgi was not activated).

      Reply
    18. Washiul Hoque on February 27, 2019 10:57 am

      Thanks a lot..

      Reply
    19. Hugo Nery on February 11, 2019 4:06 pm

      Muito obrigado!

      From Brazil

      Reply
    20. Andrew on January 29, 2019 2:51 pm

      Thank you. This worked great for me. I had done the version where you install tasksel and then lamp-server and it came with Apache 2.0 handlers which I did not want, plus I wanted 2 versions. I removed all the PHP packages (using Webmin) and then was able to follow this guide and it worked great on 18.04!

      Reply
    21. lautaro on January 27, 2019 10:36 pm

      Thanks!!! u are great

      Reply
    22. Vladimir on January 8, 2019 10:24 am

      Very clear manual. Thanks a lot!

      Reply
    23. Alex on January 2, 2019 12:33 am

      Much appreciated!

      It worked on Debian 9.6 with phpbrew for PHP 7.1, 7.2 y 7.3

      Reply
    24. Hafiz Umer on December 17, 2018 3:21 pm

      Sir you miss just 1 step.

      sudo nano /etc/hosts/

      then hosts file is open on Command line just add

      127.0.0.1 php72.example.com
      127.0.0.1 php56.example.com

      Reply
    25. Hafiz Umer on December 17, 2018 2:17 pm

      I did same steps that you mention above But it not working.
      Can any developer help me. already i spend 8 hours.

      Reply
    26. Sebas on October 30, 2018 4:29 pm

      Thanks for the tuto, but I still have issue. I received Server not Found error when I run it.

      And when running this line : “sudo a2enmod actions fastcgi alias proxy_fcgi”, fastcgi didn’t work.

      Reply
      • José Ayram on November 12, 2018 1:36 pm

        Hello!

        I have the same issue with “sudo a2enmod actions fastcgi alias proxy_fcgi” in Ubuntu 18.04.

        I got this error: ERROR: Module fastcgi does not exist!

        Reply
        • Rahul K. on November 13, 2018 5:23 am

          Hi Jose & Sebas,

          There is little update with Ubuntu 18.04. This article is also updated accordingly.

          Install Package:

          $ sudo apt install libapache2-mod-fcgid

          Enable Module:

          $ sudo a2enmod fcgid

          Reply
    27. John on September 27, 2018 2:34 am

      Simple and great post! Thank you for it!

      One note, the `libapache2-mod-fastcgi` package you have listed is named `libapache2-mod-fcgid` in more recent repos.

      Thanks again!

      Reply
    28. Corona on September 13, 2018 9:24 am

      There is no package libapache2-mod-fastcgi in 18.04

      Reply
    29. Mathieu on July 28, 2018 1:34 pm

      Thanks for this tutorial
      How does it work for a
      I try and it does not work
      It does not take into account the chosen php

      Thank you

      Reply
    30. Audrey on July 28, 2018 4:45 am

      can we set what php using on .htaccess like cPanel did?

      maybe if branch or function?

      SetHandler “proxy:unix:/var/run/php/php{ReadFormHandler}-fpm.sock|fcgi://localhost/”

      Reply
    31. alkaaf on July 25, 2018 4:57 pm

      Sir. Just… Thank you. You save a lot of my time to upgrade my code into newer php version

      Reply
    32. dibet on June 12, 2018 11:06 pm

      Man , Fantastic. Thanks.

      Reply
    33. Ela on May 30, 2018 9:09 pm

      What this line used for?

      SetHandler “proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/”

      Normally I noticed apache vs mod_php and nginx vs php fpm packages

      Reply
      • Arnothar on June 7, 2018 12:25 pm

        It redirects all php-script to the php interpreter binary using a local socket.

        Reply
    34. Jos on May 10, 2018 6:15 am

      Quickly ran into this error:

      Package libapache2-mod-fastcgi is not available, but is referred to by another package.
      This may mean that the package is missing, has been obsoleted, or
      is only available from another source

      E: Package ‘libapache2-mod-fastcgi’ has no installation candidate

      I’ve tried several online solutions for getting the lib after adding a lot of repo’s, but error remains.
      Any ideas?

      Reply
      • Dan on August 22, 2018 12:39 am

        try searching:
        $ apt-cache search fastcgi | grep apache2
        apache2-utils – Apache HTTP Server (utility programs for web servers)
        libapache2-mod-fcgid – FastCGI interface module for Apache 2
        …

        so, apt-get install libapache2-mod-fcgid

        Reply
    35. Johny on May 8, 2018 5:56 am

      Thank you so much. It helps me.

      Reply
    36. Steven on April 16, 2018 2:26 pm

      Thank you so much for this instruction! 🙂

      Reply
    37. Umair on March 8, 2018 5:51 am

      Great Work

      Reply
    38. hersdyanata on March 5, 2018 9:24 am

      hey, i follows your instructions. but mine cannot render the php script. where did i miss?

      Reply
    39. Jimmy on February 26, 2018 4:32 pm

      Thanks, it saved additional server cost…

      Reply

    Leave A Reply Cancel Reply

    Advertisement
    Recent Posts
    • How to Split Large Archives in Linux using the Command Line
    • System.out.println() Method in Java: A Beginner’s Guide
    • Split Command in Linux With Examples (Split Large Files)
    • Test Your Internet Speed from the Linux Terminal
    • 11 Practical Example of cat Command in Linux
    Facebook Twitter Instagram Pinterest
    © 2023 Tecadmin.net. All Rights Reserved | Terms  | Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.