Thank you for reading this post, don't forget to subscribe!
два сайта 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