два сайта PHP на одном сервере. Каждый сайт будет использовать свой собственный домен, каждый домен будет развертывать свою собственную версию PHP. Первый, site1.your_domain, использует PHP 7.3; второй, site2.your_domain, использует версию PHP 7.4.
1: Установка PHP 7.3 и PHP 7.4
Выполнив предварительные требования к мануалу, мы можем установить PHP версий 7.3 и 7.4, а также PHP-FPM и несколько дополнительных расширений. Чтобы установить несколько версий PHP на один сервер, необходимо установить и включить репозиторий Remi. Этот репозиторий предлагает последние версии стека PHP для системы CentOS 8.
Вы можете добавить репозиторий в свою систему, используя следующую команду:
sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
Приведенная выше команда также активирует репозиторий EPEL.
Сначала давайте узнаем, какие версии PHP 7 доступны в Remi:
sudo dnf module list php
Вы увидите такой результат:
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Теперь отключите стандартный модуль PHP и активируйте модуль PHP7.3 из Remi:
sudo dnf module reset php
sudo dnf module enable php:remi-7.3
Давайте установим php73 и php73-php-fpm:
sudo dnf install php73 php73-php-fpm -y
- php73 — это метапакет, который можно использовать для запуска приложения PHP.
- php73-php-fpm предоставляет интерпретатор Fast Process Manager, который работает как демон и принимает запросы Fast/CGI.
Теперь повторите весь процесс для PHP версии 7.4. Установите php74 и php74-php-fpm.
sudo dnf module reset php
sudo dnf module enable php:remi-7.4
sudo dnf install php74 php74-php-fpm -y
После установки обеих версий PHP запустите сервис php73-php-fpm и включите его в автозагрузку с помощью следующих команд:
sudo systemctl start php73-php-fpm
sudo systemctl enable php73-php-fpm
Затем проверьте статус сервиса php73-php-fpm с помощью следующей команды:
sudo systemctl status php73-php-fpm
Вы увидите следующий результат:
php73-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php73-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-04-22 05:14:46 UTC; 52s ago
Main PID: 14206 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 5059)
Memory: 25.9M
CGroup: /system.slice/php73-php-fpm.service
├─14206 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
├─14207 php-fpm: pool www
├─14208 php-fpm: pool www
├─14209 php-fpm: pool www
├─14210 php-fpm: pool www
└─14211 php-fpm: pool www
Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.
Повторите этот процесс для версии 7.4; запустите сервис php74-php-fpm и добавьте его в автозагрузку с помощью следующих команд:
sudo systemctl start php74-php-fpm
sudo systemctl enable php74-php-fpm
А затем проверьте состояние сервиса php74-php-fpm с помощью следующей команды:
sudo systemctl status php74-php-fpm
Вы увидите следующий результат:
php74-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-04-22 05:16:16 UTC; 23s ago
Main PID: 14244 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 5059)
Memory: 18.8M
CGroup: /system.slice/php74-php-fpm.service
├─14244 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
├─14245 php-fpm: pool www
├─14246 php-fpm: pool www
├─14247 php-fpm: pool www
├─14248 php-fpm: pool www
└─14249 php-fpm: pool www
Apr 22 05:16:15 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 22 05:16:16 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.
Теперь на вашем сервере есть две версии PHP. После этого мы можем создать структуру каталогов для каждого сайта, который должен обслуживаться этим сервером.
2: Создание структуры каталогов для сайтов
Теперь мы создадим корневые каталоги для каждого сайта, который будет развернут на этом сервере. В нашем мануале мы развернем 2 сайта: site1.your_domain и site2.your_domain. Создавая каталоги, укажите домены ваших сайтов.
sudo mkdir /var/www/site1.your_domain
sudo mkdir /var/www/site2.your_domain
По умолчанию веб-сервер Apache запускается как пользователь и группа apache. Чтобы убедиться, что права собственности и доступа на корневые каталоги сайтов установлены верно, выполните следующие команды:
sudo chown -R apache:apache /var/www/site1.your_domain
sudo chown -R apache:apache /var/www/site2.your_domain
sudo chmod -R 755 /var/www/site1.your_domain
sudo chmod -R 755 /var/www/site2.your_domain
Команда chown передает права на каталоги сайтов пользователю apache и группе apache. Команда chmod изменяет права доступа этого пользователя и группы, а также с других пользователей в системе.
Затем внутри каждого корневого каталога мы создадим файл info.php. Позже он поможет нам отобразить информацию о версии PHP каждого веб-сайта. Начните с site1:
sudo vi /var/www/site1.your_domain/info.php
Добавьте в файл следующую строку:
<?php phpinfo(); ?>
Сохраните и закройте файл. Теперь скопируйте созданный вами файл info.php для site2:
sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
Теперь у вас есть корневые каталоги, необходимые каждому сайту для обслуживания данных. Затем мы настроим свой веб-сервер Apache для поддержки двух разных версий PHP.
3: Настройка Apache для поддержки двух сайтов
В этом разделе вы создадите два файла конфигурации виртуального хоста. Это позволит двум вашим веб-сайтам одновременно работать с двумя разными версиями PHP.
Чтобы Apache обслуживал этот контент, необходимо создать файл виртуального хоста с правильными директивами. Вы создадите два новых файла конфигурации виртуального хоста в каталоге /etc/httpd/conf.d/.
Сначала создайте новый конфигурационный файл виртуального хоста для сайта site1.your_domain. Здесь мы настроим Apache для обработки контента с помощью php7.3.
sudo vi /etc/httpd/conf.d/site1.your_domain.conf
Вставьте в файл такие строки. Убедитесь, что вы указали правильный путь к корневому каталогу, ServerName и версию PHP.
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<VirtualHost *:80> ServerAdmin admin@site1.your_domain ServerName site1.your_domain DocumentRoot /var/www/site1.your_domain DirectoryIndex info.php ErrorLog /var/log/httpd/site1.your_domain-error.log CustomLog /var/log/httpd/site1.your_domain-access.log combined <IfModule !mod_php7.c> <FilesMatch \.(php|phar)$> SetHandler "proxy:unix:/var/opt/remi/php73/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> </IfModule> </VirtualHost> |
[/codesyntax]
В DocumentRoot укажите путь к корневому каталогу вашего веб-сайта. В ServerAdmin укажите адрес электронной почты для администратора сайта your_domain. В директиве ServerName определяется URL-адрес первого поддомена. В SetHandler нужно задать файл сокета PHP-FPM для php7.3.
Сохраните и закройте файл.
Затем создайте новый конфигурационный файл виртуального хоста для сайта site2.your_domain. Этот поддомен будет обслуживаться версией php7.4.
sudo vi /etc/httpd/conf.d/site2.your_domain.conf
Добавьте следующий код в файл. Убедитесь, что путь к корневому каталогу, ServerName и версия PHP соответствуют вашей конфигурации.
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<VirtualHost *:80> ServerAdmin admin@site2.your_domain ServerName site2.your_domain DocumentRoot /var/www/site2.your_domain DirectoryIndex info.php ErrorLog /var/log/httpd/site2.your_domain-error.log CustomLog /var/log/httpd/site2.your_domain-access.log combined <IfModule !mod_php7.c> <FilesMatch \.(php|phar)$> SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> </IfModule> </VirtualHost> |
[/codesyntax]
Сохраните и закройте файл. Затем проверьте конфигурации Apache на наличие синтаксических ошибок с помощью следующей команды:
sudo apachectl configtest
Если ошибок нет, вы увидите вывод:
Syntax OK
Теперь можно перезапустить сервис Apache, чтобы изменения вступили в силу:
sudo systemctl restart httpd
Теперь, когда мы настроили Apache для обслуживания каждого сайта, мы должны протестировать их, чтобы убедиться, что все работает правильно.
4: Тестирование настройки
Итак, мы уже настроили два веб-сайта, которые работают на двух разных версиях PHP. Давайте проверим результаты.
Откройте браузер и посетите оба сайта.
http://site1.your_domain
http://site2.your_domain
Вы увидите две страницы с информацией о PHP. Обратите внимание на заголовки этих страниц. На первой странице указано, что site1.your_domain использует PHP версии 7.3. Вторая страница сообщает, что site2.your_domain развернул PHP версии 7.4.
Теперь, когда вы проверили свои сайты, удалите файлы info.php. Они содержат конфиденциальную информацию о вашем сервере и доступны неавторизованным пользователям – следовательно, они представляют собой уязвимость системы безопасности. Чтобы удалить оба файла, выполните следующие команды:
sudo rm -rf /var/www/site1.your_domain/info.php
sudo rm -rf /var/www/site2.your_domain/info.php