DISCLAIMER: стаття написана PHP програмістом, який вирішив у першій годині ночі побути у ролі DevOps.
Попередня конфігурація: Ubuntu 16.04, Apache2

Буває, що на одному і тому ж веб-сервері працює одразу декілька веб-сайтів, і кожному з них потрібно певну версію PHP. За допомогою apache mod PHP можна одночасно використовувати лише одну версію PHP для усіх сайтів. 

Ми покажемо як одночасно використовувати:

 - php5.6 для веб-сайту http://php56.loc із встановленою Magento 1.7
 - php7.2 для веб-сайту http://php72.loc із встановленою Magento 2.3.0. 

Для вирішення цієї проблеми необхідно налаштувати PHP-FPM.

 

1. Встановіть PHP5.6 та PHP-FPM5.6

sudo apt install libapache2-mod-fastcgi php5.6-fpm php5.6 libapache2-mod-php5.6 php5.6-curl php5.6-intl php5.6-zip php5.6-soap php5.6-xml php5.6-mysqli php5.6-gd php5.6-mcrypt php5.6-mbstring php5.6-bcmath php5.6-pdo php5.6-xml php5.6-mysql

2. Встановіть PHP7.2 та PHP-FPM7.2

sudo apt install libapache2-mod-fastcgi php7.2-fpm php7.2 libapache2-mod-php7.2 php7.2-curl php7.2-intl php7.2-zip php7.2-soap php7.2-xml php7.2-mysqli php7.2-gd php7.2-mbstring php7.2-bcmath php7.2-pdo php7.2-xml php7.2-mysql

Команди для встановлення двох різних версій дуже схожі, відрізняються лише відсутністю php7.2-mcrypt у php7.2.

5. Вимкніть усі PHP Apache моди

Для того, щоб перевірити, чи  увімкнені, пов'язані із PHP Apache моди, виконайте таку команду:

sudo ls -la /etc/apache2/mods-enabled | grep php

Результат виконання може мати такий вигляд:

lrwxrwxrwx 1 root root 29 лют 9 17:16 php7.2.conf -> ../mods-available/php7.2.conf
lrwxrwxrwx 1 root root 29 лют 9 17:16 php7.2.load -> ../mods-available/php7.2.load
lrwxrwxrwx 1 root root 29 лют 9 17:16 php5.6.conf -> ../mods-available/php5.6.conf
lrwxrwxrwx 1 root root 29 лют 9 17:16 php5.6.load -> ../mods-available/php5.6.load

Вимкніть моди, які були знайдені. Виконайте команди:

sudo a2dismod php5.6
sudo a2dismod php7.2

6. Вимкніть усі PHP Apache налаштування

Для перевірки увімкненості, пов'язаних із PHP Apache налаштувань, виконайте команду:

sudo ls -la /etc/apache2/conf-enabled | grep php

Щоб вимкнути знайдені налаштування, виконайте команду:

sudo a2disconf назва_конфіга

7. Увімкніть actions та fastcgi  Apache2 моди

sudo a2enmod actions 
sudo a2enmod fastcgi

8. Увімкніть PHP-FPM Apache2 конфіги

sudo a2enconf php5.6-fpm
sudo a2enconf php7.2-fpm

9. Налаштуйте Default Apache virtualhost

Додайте цей код у дефолтний віртуальний хоста Apache2 (Ви можете додати його наприклад на початок файлу)

<IfModule mod_fastcgi.c>
AddHandler php56-fcgi-www .php
Action php56-fcgi-www /php56-fcgi-www
Alias /php56-fcgi-www /usr/lib/cgi-bin/php56-fcgi-www
    FastCgiExternalServer /usr/lib/cgi-bin/php56-fcgi-www -socket /run/php/php5.6-fpm.sock -pass-header Authorization
     <Directory "/usr/lib/cgi-bin">
         Require all granted
     </Directory>
</IfModule>
<IfModule mod_fastcgi.c>
         AddHandler php72-fcgi-www .php
         Action php72-fcgi-www /php72-fcgi-www
         Alias /php72-fcgi-www /usr/lib/cgi-bin/php72-fcgi-www
         FastCgiExternalServer /usr/lib/cgi-bin/php72-fcgi-www -socket /run/php/php7.2-fpm.sock -idle-timeout 1800 -pass-header Authorization
         <Directory "/usr/lib/cgi-bin">
             Require all granted
         </Directory>
</IfModule>

10. Увімкніть PHP5.6 для http://php56.loc

Для цього у файлі віртуального хоста цього ж домену (тег <VirtualHost>) вставте код:

<VirtualHost *:80>
...
<IfModule mod_fastcgi.c>
    <FilesMatch ".+\.ph(p[345]?|t|tml)$">
        SetHandler php56-fcgi-www
    </FilesMatch>
</IfModule>
...
</VirtualHost>

11. Увімкніть PHP7.2 для http://php72.loc

Для цієї дії у файлі віртуального хоста цього домену (тег <VirtualHost>) вставте код:

<VirtualHost *:80>
...
<IfModule mod_fastcgi.c>
    <FilesMatch ".+\.ph(p[345]?|t|tml)$">
        SetHandler php72-fcgi-www
    </FilesMatch>
</IfModule>
...
</VirtualHost>

12. Перезапустіть Apache2

sudo service apache2 restart

13. Перевірте результат

Це можна зробити за допомогою файлу info.php з кодом:

<?php echo phpinfo();

PHP Info

Посилання на джерела з яких взяті деякі команди:
https://stackoverflow.com/questions/42696856/running-two-php-versions-on-the-same-server (Running two PHP versions on the same server)
https://medium.com/@sbuckpesch/run-multiple-php-version-on-the-same-server-using-php-fpm-and-xdebug-on-ubuntu-16-04-6a84f5b7d7ce (Run multiple PHP version on the same server using php-fpm and xdebug on Ubuntu 16.04)