Поиск по сайту:

Как запустить несколько веб-сайтов с разными версиями PHP в Nginx


Иногда разработчики PHP хотят создавать и запускать разные веб-сайты/приложения, используя разные версии PHP на одном веб-сервере. Как системный администратор Linux, вам необходимо настроить среду, в которой вы можете запускать несколько веб-сайтов, используя разные версии PHP, на одном веб-сервере, то есть Nginx.

В этом руководстве мы объясним вам, как установить несколько версий PHP и настроить веб-сервер Nginx для работы с ними через серверные блоки (виртуальные хосты в Apache) в Дистрибутивы CentOS/RHEL 7, использующие стек LEMP.

Читайте также: Pyenv – установка нескольких версий Python для конкретного проекта

Nginx использует PHP-FPM (расшифровывается как FastCGI Process Manager), который является альтернативной реализацией PHP FastCGI с некоторыми дополнительные полезные функции для сильно нагруженных веб-сайтов.

Настройка среды тестирования

  1. Сервер CentOS 7 или RHEL 7 с минимальной установкой.
  2. HTTP-сервер Nginx.
  3. PHP 7.1 (будет использоваться в качестве версии по умолчанию) и 5.6.
  4. Сервер базы данных MariaDB.
  5. IP-адрес сервера: 192.168.56.10.
  6. Веб-сайты: example1.com и example2.com.

Шаг 1. Установка и включение EPEL и репозитория Remi

1. Сначала начните с установки и включения репозитория EPEL и Remi, который предлагает последние версии PHP. стек в дистрибутивах CentOS/RHEL 7.

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

2. Затем установите пакет yum-utils, который расширяет встроенные функции yum и предоставляет команду yum-config-manager, которая используется для включения или отключите репозитории Yum в системе.

yum install yum-utils

Примечание. В RHEL 7 вы можете включить дополнительный канал для некоторых зависимостей с помощью следующей команды.

subscription-manager repos --enable=rhel-7-server-optional-rpms

Шаг 2. Установка веб-сервера Nginx

3. Чтобы установить последнюю версию Nginx, нам нужно добавить официальный репозиторий Nginx, создать файл с именем /etc/yum.repos.d/nginx.repo.

vi /etc/yum.repos.d/nginx.repo

Добавьте следующие строки в файл в соответствии с вашим дистрибутивом.

--------------- On CentOS 7 --------------- 
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=0 
enabled=1 


--------------- On RHEL 7 ---------------
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/ 
gpgcheck=0 
enabled=1 

4. После добавления репозитория nginx вы можете установить Nginx с помощью инструмента диспетчера пакетов yum, как показано.

yum install nginx

Шаг 3. Установка сервера базы данных MariaDB

5. Чтобы установить последнюю версию MariaDB, нам нужно добавить официальный репозиторий MariaDB, создать файл с именем /etc/yum.repos.d/mariadb.repo.

vi /etc/yum.repos.d/mariadb.repo

Добавьте следующие строки в файл в соответствии с вашим дистрибутивом.

--------------- On CentOS 7 --------------- 
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 

6. После добавления репозитория MariaDB вы можете установить MariaDB с помощью инструмента диспетчера пакетов yum, как показано.

yum install MariaDB-client MariaDB-server

7. После этого защитите установку сервера базы данных, используя приведенный ниже сценарий. Установите пароль root и ответьте y и нажмите [Enter] для ответа на остальные последующие вопросы, чтобы отключить удаленный вход пользователя root, удалить учетные записи анонимных пользователей и протестировать базу данных, которая default могут быть доступны всем пользователям, даже анонимным.

mysql_secure_installation

Читайте также: 12 лучших рекомендаций по обеспечению безопасности MySQL/MariaDB для Linux

Шаг 4. Установка нескольких версий PHP

8. Чтобы установить различные версии PHP для своих проектов, используйте команду yum-config-manager, чтобы установить несколько версий PHP вместе с наиболее необходимыми модулями, как показано.

Установить версию PHP 7.1

yum-config-manager --enable remi-php71  [Default]
yum install php php-common php-fpm
yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo

Установить версию PHP 5.6

yum install php56 php56-php-common php56-php-fpm
yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo

9. После установки PHP вы можете использовать следующую команду, чтобы проверить версию PHP по умолчанию, используемую на вашем сервере.

php -v

Шаг 5. Настройка PHP-FPM и PHP56-PHP-FPM

10. Это самая интересная часть этого руководства: она объясняет, как можно запускать несколько версий PHP на своем сервере. Здесь вы настроите различные версии php-fpm, с которыми будет работать Nginx. Вам следует определить пользователя/группу процессов FastCGI, а также порты, которые они будут прослушивать.

Это следующие два файла конфигурации, которые вы собираетесь редактировать.

  • php-fpm (по умолчанию 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

Откройте файлы выше, установите пользователя/группу процессов FastCGI.

vi /etc/php-fpm.d/www.conf   [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 

Значения по умолчанию должны быть apache, измените их на nginx, как показано.

user = nginx
group = nginx

11. Затем найдите параметры прослушивания и определите адрес:порт, на который будут приниматься запросы FastCGI.

listen = 127.0.0.1:9000	[php-fpm]
listen = 127.0.0.1:9001	[php56-php-fpm]

12. После выполнения всей вышеуказанной настройки вам необходимо запустить и включить Nginx, MariaDB и PHP-FPM. для автоматического запуска при загрузке системы.

systemctl enable nginx 
systemctl start nginx 

systemctl enable mariadb 
systemctl start mariadb 

---------------- PHP 7.1 ---------------- 
systemctl enable php-fpm 
systemctl start php-fpm 

---------------- PHP 5.6 ----------------
systemctl enable php56-php-fpm 
systemctl start php56-php-fpm 

Внимание: если при запуске второго экземпляра PHP, php56-php-fpm, возникают ошибки, возможно, политика SELinux блокирует это с самого начала. Если SELinux находится в принудительном режиме, установите для него разрешительный режим, а затем попробуйте запустить службу еще раз.

getenforce
setenforce 0 

Шаг 6. Настройте веб-сайты с разрешениями

13. Теперь вы можете создать необходимые каталоги для своих веб-сайтов в /var/www/html/. Вам также необходимо создать каталоги для хранения журналов следующим образом:

---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/ 
mkdir -p /var/log/nginx/example1.com/ 
 

---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/ 

14. Установите соответствующие права владения для всех каталогов.

---------------- Website 1 ----------------
chown -R root:nginx /var/www/html/example1.com/ 
chmod -R 755 /var/www/html/example1.com/ 
chown -R root:nginx /var/log/nginx/example1.com/
chmod -R 660 /var/log/nginx/example1.com/ 

---------------- Website 2 ----------------
chown -R root:nginx /var/www/html/example2.com/ 
chmod -R 755 /var/www/html/example2.com/
chown -R root:nginx /var/log/nginx/example2.com/ 
chmod -R 660 /var/log/nginx/example2.com/

Шаг 7. Настройка блоков сервера Nginx для веб-сайтов

15. Теперь настройте, как Nginx будет обрабатывать запросы к вашим веб-сайтам, используя файлы конфигурации блока сервера, которые должны находиться в /etc/nginx/conf.d/.

Создайте файлы конфигурации для своих веб-сайтов, заканчивающиеся расширением .conf.

vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf

Затем вставьте следующие конфигурации блоков сервера в соответствующие файлы.

Сайт 1

server {
        listen 80;
        server_name example1.com www.example1.com;

        root   /var/www/html/example1.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example1.com/example1_access_log;
        error_log   /var/log/nginx/example1.com/example1_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example1.com/;
                fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

Сайт 2

server {
        listen 80;
        server_name example2.com www.example2.com;

        root    /var/www/html/example2.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example2.com/example2_access_log;
        error_log  /var/log/nginx/example2.com/example2_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example2.com/;
                fastcgi_pass   127.0.0.1:9001;	#set port for php56-php-fpm to listen on
	        fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

16. Убедитесь, что в закрывающей части блока http в /etc/nginx/nginx.conf есть следующая строка. Это помогает включить все файлы конфигурации в каталог /etc/nginx/conf.d/, когда Nginx работает.

include /etc/nginx/conf.d/*.conf;

Шаг 8. Тестирование различных версий PHP

17. Наконец, вам нужно проверить, что ваш сервер использует две версии PHP. Вы можете создать очень простой скрипт info.php в корневых каталогах документов ваших веб-сайтов, как показано.

echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18. Чтобы применить все внесенные выше изменения, вам необходимо перезапустить Nginx, php-fpm и php56-php- фут/мин. Но прежде всего вы можете проверить файлы конфигурации Nginx на наличие синтаксических ошибок, прежде чем делать это.

nginx -t 
systemctl restart nginx php-fpm php56-php-fpm

19. И еще кое-что, что нужно сделать, особенно если вы используете свой сервер локально, вам необходимо настроить локальный DNS с помощью файла /etc/hosts, как показано на рисунке. снимок экрана ниже.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Наконец, откройте веб-браузер и введите следующие адреса, чтобы проверить версии PHP, установленные в системе.

http://example1.com/index.php
http://example2.com/index.php

Вот и все! Теперь вы можете развертывать файлы и тестировать веб-сайты с различными версиями PHP. Если у вас есть какие-либо дополнения или вопросы, воспользуйтесь формой комментариев ниже.