🐹 CentOS 7: Установка PHP 7.4 и настройка php-fpm.sock — Fastcgi Process Manager для Nginx.
Содержание:
1. Введение.
2. Настройка репозиториев.
3. Установка php 7.4 и php-fpm.sock.
4. Настройка php-fpm.sock.
5. Оригиналы источников информации.
1. Введение.
Существует php 5.6, 7.4 или 8. Для каждой версии php существует режим работы, который гораздо важнее для производительности, чем просто версия php.
В apache существует режимы работы php-cgi — это в принципе то же самое что и php-fpm, но есть существенная разница. CGI — тоже оно, но не совсем.
Что такое CGI и чем он отличается от обычного apache по-умолчанию? Apache с mod_php исполняет php-код сам, используя при этом кучу ресурсов сервера и делая это внутри своих процессов. Когда используется режим CGI — это значит apache не обрабатывает php сам, а запускает php-cgi для каждого php-скрипта и забирает у него результат обработки. То есть это даже несколько усложняет схему: пользователь шлёт запрос к nginx > тот обращается к apache > apache запускает скрипты через CGI и получает результат их выполнения > собирает из них html и отдаёт его nginx > тот собирает статические страницы, нужную для этой html страницы в кучу > отдает пользователю.
Еще существует режим fastcgi — это тот же CGI, но отличается от него тем, что оно позволяет apache не запускать для каждого скрипта отдельный процесс, а запустить один или несколько процессов и отдавать скрипты ему, получать от него ответ. Это немного производительнее, чем CGI, за счёт того, что операции создания процессов для операционной системы считаются довольно ресурсоемкими. в работе этой схемы задействован всё тот же apache. Fastcgi без apache в данном случае работать не может, это все равно модуль mod_fastcgi.
php-fpm — это Fastcgi Process Manager. Он представляет из себя отдельную службу, которая работает независимо от какого-либо web-сервера. Он может сам принимать запросы от web-сервера через unix-сокет или через сетевое соединение. Другими словами, вы можете держать сайты на одном сервере, а php-скрипты исполнять на другом.
Получается, что для nginx помощь apache становится уже не нужна, потому как nginx может работать с php-fpm сам, напрямую. Apache тоже может работать в таком же режиме с php-fpm, но это не имеет смысла. php-fpm не может отдавать статические файлы или html, он может только исполнять php.
Получается такая схема: запрос пользователя > nginx > php-fpm > nginx, он собирает из ответа php и статики страницу > отдаёт пользователю. FPM в разы производительнее apache, в каком бы режиме тот ни был запущен.
2. Настройка репозиториев.
Установим YUM утилиты:
# yum -y install yum-utils mc
Для установки репозитория REMI в CentOS 7 требуется установить EPEL репозиторий и выполнить команду:
# yum -y install epel-release
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Нет смысла держать репозитории, которые устарели.
В базовой установке CentOS 7 установлен remi-safe репозиторий. Там содержатся копии только старых-добрых программ, которые не обновляются очень долго в угоду стабильности работы некоторых систем. Так как мы будем ставить новую версию репозитория REMI, то старую версию REMI-SAFE можно смело деактивировать.
Для активации remi надо вначале отключить remi-safe и ius репозиторий (если он у вас включен), а потом активировать remi выполнив команды:
# yum-config-manager --disable remi-safe
Возможны конфликты с репозиторием IUS! Отключим IUS, если он активирован ранее:
# yum-config-manager --disable ius
Активируем remi:
# yum-config-manager --enable remi
Посмотрим какие репозитории появились в доступности у CentOS 7:
# yum repolist
Посмотрим доступные репозитории remi:
# ls /etc/yum.repos.d/remi*
Как видите, есть несколько версий php, сейчас мы можем активировать php 7.4, для этого откройте соответствующий файл, найдите секцию [remi-php74]
, в ней найдите enabled и поменяйте значение с 0 на 1:
# mcedit /etc/yum.repos.d/remi-php74.repo
enabled=1
Получится вот так, если активировать вручную:
Или вот так, если активируем репозиторий remi-php74 автоматизированно, для этого выполняем команду:
# yum-config-manager --enable remi-php74
3. Установка php 7.4 и php-fpm.sock.
Теперь устанавливаем php версии 7.4.
# yum -y install php74
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации web-сервера.
# yum -y install php php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip php-mysqlnd php-json
Запускаем php-fpm и добавляем в автозагрузку.
# systemctl start php-fpm
# systemctl enable php-fpm
Проверим активность службы:
Проверяем, запустился ли он.
Перед этим установим сетевые утилиты для CentOS 7:
# yum -y net-tools
Вот что он вам покажет до того, как мы переделаем всё под свои нужды.
# netstat -tulpn | grep php-fpm
Все в порядке, повис на порту 9000.
4. Настройка php-fpm.sock.
Теперь переделаем всё под наши нужды. Запустим его через unix сокет.
Создадим резервную копию конфигурационного файла:
# cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.original
Открываем файл конфигурации/etc/php-fpm.d/www.conf
:
# mcedit /etc/php-fpm.d/www.conf
Ищем и комментируем строку:
listen = 127.0.0.1:9000
Вот так:
; listen = 127.0.0.1:9000
Вместо нее, сразу под ней, добавляем несколько других:
listen = /var/run/php-fpm/php-fpm.sock listen.mode = 0660 listen.owner = nginx listen.group = nginx
Заодно измените пользователя, от которого будет работать php-fpm.
user = apache group = apache
Вместо apache укажите nginx.
user = nginx group = nginx
Перезапускаем php-fpm, чтобы применить настройки.
# systemctl restart php-fpm
Проверяем, стартовал ли указанный сокет.
# ll /var/run/php-fpm/php-fpm.sock
Нужно дать права движку web-сервера на операции с файлами и сессиями в специальной папке /var/lib/php/session
.
Создаем папку session
:
# mkdir -p /var/lib/php/session
Накидываем права:
# chown -R nginx:nginx /var/lib/php/session
# chmod -R 755 /var/lib/php/session
Более безопасно было бы для каждого сайта делать отдельную директорию для сессий и определять ее в настройках php, но это уже частный случай. В общем случае, можно оставить так.
5. Оригиналы источников информации.
- serveradmin.ru «Настройка web сервера nginx, php-fpm, php7 на CentOS 8» от 28.02.2020.
- vpsadm.ru «Разница между режимами, PHP-FPM, CGI, FastCGI, модуль Apache».