Как подключить NGINX к PHP-FPM

PHPPHP-FPM

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

PHP-FPM не только поддерживает настройку пулов ресурсов FastCGI, но также улучшает многие внутренние функции FastCGI и увеличивает отчеты об ошибках, завершение сценариев и многое другое. Он включает PHP-демонизацию, управление процессами, динамическое число процессов, из которых могут поступать запросы, заголовок ошибок, поддержку ускоренной загрузки и многое другое.

Чтобы принимать запросы FastCGI от NGINX, PHP-FPM может прослушивать сокет TCP/IP или UNIX сокет. Какой бы адрес вы ни выбрали, это то, что NGINX использует для подключения (запросы прокси) к PHP-FPM, используя директиву fastcgi_pass.

В этом руководстве объясняется, как настроить NGINX для серверных приложений PHP с использованием PHP-FPM. Он описывает, когда использовать сокет TCP/IP или сокет UNIX для подключения NGINX к PHP-FPM и почему.

В этом руководстве предполагается, что в вашей системе Linux установлены NGINX и PHP-FPM.

 

Что я должен использовать: сокет UNIX или сокет TCP/IP?

Сокеты UNIX (или IPC) являются средством межпроцессного взаимодействия (IPC), которое обеспечивает эффективный обмен данными между процессами, работающими в одной и той же операционной системе, в то время как сокеты TCP / IP (или интернет-домена) позволяют процессам обмениваться данными по сети.

В отличие от сокета TCP/IP, который идентифицирует сервер по IP-адресу и порту (например, 127.0.0.1:9000), вы можете привязать сервер к сокету UNIX, используя путь к файлу (например, /run /php-fpm/www.sock), который виден в файловой системе.

Сокет UNIX — это особый тип файла — к нему применяются разрешения на доступ к файлам и каталогам (как в случае с любым другим типом файла UNIX), и его можно использовать для ограничения того, какие процессы на хосте могут читать и записывать в файл, (и, таким образом, общаться с внутренним сервером).

Таким образом, сокет UNIX является безопасным, поскольку его могут использовать только процессы на локальном хосте. Сокет TCP/IP может быть доступен из Интернета, и это может представлять угрозу безопасности, если не будут приняты дополнительные меры безопасности, такие как брандмауэр.

Важно отметить, что использование сокета UNIX — это не то же самое, что использование сокета TCP/IP с точки зрения производительности. Несколько тестов и тестов производительности показали, что сокеты UNIX работают быстрее. Основным недостатком сокетов UNIX является то, что они менее масштабируемы, они поддерживают только межпроцессное взаимодействие в одной и той же операционной системе (ОС).

 

Где я могу настроить адрес прослушивания PHP-FPM?

Вы можете настроить адрес, который прослушивает PHP-FPM, в файле конфигурации пула ресурсов. Обратите внимание, что с PHP-FPM вы можете запускать несколько пулов процессов с разными настройками. Пул по умолчанию называется www.

Расположение файла конфигурации пула ресурсов зависит от способа установки PHP и PHP-FPM в системе Linux (будь то версия по умолчанию/одна версия или несколько версий одновременно).

Например, в CentOS 8 с одной версией все файлы конфигурации PHP находятся в каталоге /etc, а файл конфигурации пула PHP-FPM по умолчанию (www) — /etc/php-fpm.d/www.conf:

Чтобы вывести список всех файлов конфигурации PHP, используйте следующую команду ls.

# ls /etc/php/*

 

php-configuration-files-on-centos

 

В Ubuntu 20.04 файлы конфигурации PHP находятся в каталоге /etc/php/<php-version>/, а файл конфигурации пула PHP-FPM (www) по умолчанию —/etc/php/<php-version>/fpm /pool.d/www.conf:

$ ls /etc/php/7.4/

 

php-configuration-files-on-ubuntu-20.04

 

Настройка PHP-FPM для прослушивания на сокете UNIX

Чтобы настроить PHP-FPM на прослушивание сокета UNIX, откройте файл конфигурации пула PHP-FPM по умолчанию, используя свой любимый текстовый редактор.

# vim /etc/php-fpm.d/www.conf #Ubuntu/Debian
OR
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf #CentOS/RHEL/Fedora

 

Затем найдите директиву listen и задайте для нее путь к файлу сокета UNIX следующим образом. Обратите внимание, что в большинстве установок по умолчанию используется сокет UNIX.

listen = /run/php/php7.4-fpm.sock #Ubuntu/Debian
OR
listen = /run/php-fpm/www.sock #CentOS/RHEL/Fedora

 

Если вы используете сокет UNIX, вам также необходимо установить соответствующие разрешения на чтение/запись для файла, чтобы разрешить подключения с веб-сервера NGINX. По умолчанию NGINX работает как пользователь и группа nginx в CentOS/RHEL/Fedora и www-data в Ubuntu и Debian.

 

Итак, найдите параметры listen.owner и listen.group и установите их соответствующим образом. Также установите режим на 0660, используя параметр listen.mode.

------------- On Debian and Ubuntu -------------
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

------------- On CentOS/RHEL and Fedora -------------
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

 

Обратите внимание, что если разрешения для файла сокета UNIX установлены неправильно, NGINX может вернуть ошибку неверного шлюза.

 

sample-php-fpm-pool-config-for-listening-on-unix-socket

 

 

Настройка PHP-FPM для прослушивания через сокет TCP/IP

Хотя сокет UNIX быстрее сокета TCP/IP, он менее масштабируем, поскольку он может поддерживать межпроцессное взаимодействие только в одной и той же ОС. Если NGINX и внутренний сервер приложений (PHP-FPM) работают в разных системах, вам придется настроить PHP-FPM для прослушивания сокетов TCP/IP для удалленого подключения.

В файле конфигурации пула PHP-FPM установите адрес прослушивания следующим образом. Убедитесь, что выбранный вами порт не используется другим процессом или службой в той же системе.

listen = 127.0.0.1:3000

 

sample-php-fpm-pool-config-for-listening-on-tcp-socket

 

Настройка NGINX для работы с сервером приложений PHP-FPM

После того, как вы настроили адрес, который прослушивает PHP-FPM, вам нужно настроить NGINX для запроса прокси к нему через этот адрес, используя параметр конфигурации fastcgi_pass, в файле конфигурации блока виртуального сервера.

Например, если файл конфигурации для вашего сайта — /etc/nginx/conf.d/example.com.conf, откройте его для редактирования.

# vim /etc/nginx/conf.d/example.com.conf

 

Найдите блок местоположения для обработки файлов .php и установите параметр fastcgi_pass следующим образом, если вы настроили PHP-FPM для прослушивания на сокете UNIX.

fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock #CentOS/RHEL/Fedora

 

connect-nginx-to-php-fpm-using-unix-domain-socket

 

Или используйте адрес TCP/IP, если вы настроили PHP-FPM для прослушивания сокета TCP/IP. Если внутренний сервер приложений (PHP-FPM) работает на отдельном сервере (замените 10.42.0.10 на IP-адрес компьютера, на котором работает сервер PHP-FPM FastCGI).

fastcgi_pass 10.42.0.10:3000;

 

connect-nginx-to-php-fpm-using-tcp-domain-socket

 

Важное замечание: В CentOS 8 PHP-FPM определен как вышестоящий сервер в файле /etc/nginx/conf.d/php-fpm.conf внутри вышестоящего блока с именем php-fpm.

Здесь вы можете внести соответствующие изменения в зависимости от адреса, который PHP-FPM настроил для прослушивания, в файле конфигурации пула. Конфигурация по умолчанию указывает на сокет UNIX.

upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}

 

php-upstream-server-definition-in-nginx-config

 

и в файле блока сервера вашего сайта просто установите параметр fastcgi_pass, как показано.

fastcgi_pass php-fpm;

 

connect-nginx-to-php-fpm-upstream-server

 

После внесения изменений в конфигурации PHP-FPM и NGINX проверьте правильность синтаксиса их конфигурации следующим образом.

------------- On Debian and Ubuntu -------------
$ sudo php-fpm -t
$ sudo nginx -t

------------- On CentOS/RHEL and Fedora -------------
# php-fpm -t
# nginx -t

 

Хотя вывод команды показывает только основной файл конфигурации, все остальные файлы конфигурации также включены и проверены.

 

check-php-fpm-nginx-configs-for-syntax-correctness-1

 

Затем вам нужно перезапустить две службы, чтобы применить изменения, используя команду systemctl.

------------- On Debian and Ubuntu -------------
$ sudo systemctl restart nginx
$ sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora -------------
# systemctl restart nginx
# systemctl restart php-fpm

 

 

Если вы получили какие-либо ошибки, вы можете проверить файлы журналов NGINX и PHP-FPM с помощью команды cat.

------------- On Debian and Ubuntu -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php-fpm/www-error.log

 

Это все, что у нас было для вас. Раздел комментариев ниже можете использовать, чтобы задать вопросы. Для получения дополнительной информации см. Документацию NGINX и документацию PHP-FPM.

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасностикурсы DevNet (программируемые сети) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

 

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
PHPPHP-FPM

Больше похожих постов

Lemp on RHEL8

Как установить LEMP на RHEL 8

227
0
Многие хорошо знают о LAMP, но меньше людей знают о стеке LEMP, который заменяет веб-сервер Apache на облегченный Nginx. Каждый…
lemp on debian10

Как установить LEMP на сервере Debian 10

295
0
Стек «LEMP» представляет собой смесь программного обеспечения с открытым исходным кодом, которое обычно устанавливается на сервере Linux для развертывания динамических…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Most Viewed Posts
18-Tar-Command-Examples-in-Linux

18 примеров команды tar в Linux

2,825
4 комментария
Linux «tar» — архив, который используется большим количеством системных администраторов Linux/Unix для работы с накопителями для резервного копированиея. Команды tar…
Меню