Установка PHP 5.6 + PHP 7.1 на Debian 8 + nginx

Быстрый способ установить две версии PHP на Debian 8 через репозиторий deb.sury.org. Для Debian 7, к сожалению, этот способ не подойдёт.

Установка репозитория deb.sury.org

Чтобы установить репозиторий, нужно от супер-пользователя выполнить следующие действия:

apt-get install apt-transport-https ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ jessie main" > /etc/apt/sources.list.d/php.list
apt-get update

После этого будут доступны пакеты php5.6-xxx и php7.1-xxx. Стандартные дебиановские пакеты php5-xxx также будут доступны, но их лучше удалить, чтобы не было конфликтов. Сделать это можно одной командой:

apt-get purge 'php.*'

Установка новых версий PHP

Выполняем следующие команды установки:

# Установка PHP 5.6
apt-get install php5.6-cli php5.6-curl php5.6-fpm php5.6-gd php5.6-intl php5.6-json php5.6-mbstring php5.6-mcrypt php5.6-pdo-mysql php5.6-xml php5.6-zip

# Установка PHP 7.1
apt-get install php7.1-cli php7.1-curl php7.1-fpm php7.1-gd php7.1-intl php7.1-json php7.1-mbstring php7.1-mcrypt php7.1-pdo-mysql php7.1-xml php7.1-zip

Всё! На этом установка PHP закончена.

Установка NGINX

Выполняем следующую команду:

apt-get install nginx

Теперь отключаем дефолтный конфиг и подключаем папку /www:

unlink /etc/nginx/sites-enabled/default
echo 'include /www*/*/conf/nginx.conf;' > /etc/nginx/sites-enabled/www

Настройка default-хоста

Создаём папки, необходимые для работы:

mkdir -p /www/default/docs /www/default/logs /www/default/conf

Добавляем конфиг /www/default/conf/nginx.conf:

server {
    listen *:80 default_server;
    server_name default;

    root       /www/default/docs;
    access_log /www/default/logs/access.log;
    error_log  /www/default/logs/error.log;
    
    set $phpini "
        error_log=/www/default/logs/php-errors.log
    ";

    index index.php index.html;

    location ~ ^(.*\.php)$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php5.6-fpm.sock;
    
        if ($arg_php7) {
            fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        }
        
        fastcgi_param PHP_VALUE "$phpini";
        fastcgi_param SCRIPT_FILENAME $document_root$1;
    }
}

Перезапускаем nginx:

service nginx reload

Создаём /www/default/docs/index.php:

echo '<?php phpinfo();' > /www/default/docs/index.php

Проверяем результат:

> wget -qO- 'http://localhost/' | grep -oE 'PHP Version [0-9\.]+'
PHP Version 5.6.30
> wget -qO- 'http://localhost/?php7=1' | grep -oE 'PHP Version [0-9\.]+'
PHP Version 7.1.4