🐹 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. Оригиналы источников информации.

  1. serveradmin.ru «Настройка web сервера nginx, php-fpm, php7 на CentOS 8» от 28.02.2020.
  2. vpsadm.ru «Разница между режимами, PHP-FPM, CGI, FastCGI, модуль Apache».

Читайте также: