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

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

Рубрики:

PHP, PHP-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.

 

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

 

php

 

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

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

 

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

 

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

 

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

 

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

 

php

 

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

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

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

 

php

 

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

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

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

 

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

 

connect-nginx-to-php-fpm-using-unix-domain-socket - Как подключить NGINX к PHP-FPM

 

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

 

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.

 

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

 

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

 

connect-nginx-to-php-fpm-upstream-server - Как подключить NGINX к PHP-FPM

 

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

 

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

 

 

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

 

 

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

 

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

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

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

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

 

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

PHP, PHP-FPM

Метки:

, , ,

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

1 комментарий. Оставить новый

  • После важного замечания для CentOS 8 PHP-FPM:

    nginx: [emerg] no port in upstream «php-fpm» in /etc/nginx/sites-enabled/….conf:63
    nginx: configuration file /etc/nginx/nginx.conf test failed

    Ответить

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

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

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


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню