Интерпретатор языка программирования PHP может работать в нескольких режимах. Он может быть интегрирован в веб-сервер в виде специального модуля или использоваться как отдельный сервис PHP-FPM. Аббревиатура FPM расшифровывается как FastCGI Process Manager. Это сервис, который запускает несколько процессов, которые могут выполнять PHP скрипты.
PHP-FPM может получать скрипты, которые надо выполнить, с помощью TCP или Unix сокетов. Именно такой способ выполнения скриптов используется в Nginx. В этой статье мы рассмотрим как выполняется установка Nginx с PHP-FPM в Ubuntu.
Содержание статьи:
Установить Nginx можно двумя способами. Первый способ заключается в установки пакета из официального репозитория Ubuntu. На момент написания статьи (1 августа 2021 года) актуальной версией Nginx присутствующей в репозитории Ubuntu была версия 1.18.0. Данная версия считается устаревшей. Актуальной же версией считается 1.20.1 (по состоянию на 1 августа 2021 года).
Если вы хотите установить версию Nginx из репозиториев Ubuntu необходимо выполнить следующие действия. Для начала обновляем списки пакетов при помощи команды:
sudo apt update
Для того, чтобы установить Nginx, достаточно выполнить команду:
sudo apt -y install nginx
После этого программу можно использовать. Проверка и настройка программы будет описана в разделах ниже.
Второй способ заключается в установке последней версии Nginx из официальных репозиториев, которые предоставляют разработчики Nginx. Если вы хотите использовать данный метод установки, для начала необходимо обновить списки пакетов при помощи команды:
Установите необходимые пакеты:
sudo apt -y install curl gnupg2 ca-certificates lsb-release
Далее у вас на выбор есть два пути – подключить репозиторий со стабильной версией nginx или подключить репозиторий с основной версией. Стабильная версия является более проверенной и работоспособной. Эту версию можно использовать, как и в тестовых средах так и на производственных. Основная версия не такая стабильная и может содержать ошибки. Данную версию не рекомендуется использовать в производственных средах.
Для подключения репозитория со стабильной версией nginx, выполните следующую команду:
echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
Для подключения репозитория с основной версией nginx, выполните следующую команду:
echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
Следующие шаги необходимо выполнять вне зависимости от выбранного репозитория. Импортируйте официальный ключ, используемый пакетным менеджером для проверки подлинности пакетов:
curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key
Проверьте, верный ли ключ был загружен:
gpg --dry-run --quiet --import --import-options import-show /tmp/nginx_signing.key
Вывод команды должен содержать полный отпечаток ключа 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:
Переместите ключ в каталог доверенных ключей apt:
sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
Чтобы установить nginx, выполните следующие команды:
Версия Nginx от разработчиков немного отличается от версии из официальных репозиториев. Все дополнительные конфигурационные файлы здесь находятся в папке /etc/nginx/conf.d. Если вы хотите использовать папки sites-available и sites-enabled, то необходимо их создать:
sudo mkdir /etc/nginx/sites-availablesudo mkdir /etc/nginx/sites-enabled
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
Затем добавьте следующую строчку в конец секции http файла /etc/nginx.conf для того чтобы из папки /etc/nginx/sites-enabled загружалась конфигурация сайтов:
sudo vi /etc/nginx/nginx.conf
include /etc/nginx/sites-enabled/*.conf;
Затем перезапустите Nginx:
sudo nginx -s reload
После установки пакета, проверяем что Nginx успешно запустился при помощи команды:
sudo systemctl status nginx
Если в статусе вместо active будет inactive (dead), то сервис необходимо запустить вручную при помощи команды:
sudo systemctl start nginx
Так же обратите внимание, что вы не можете запускать Apache и Nginx на одном порту. В таком случае вы получите ошибку nginx address already in use 80. Для корректной работы Nginx, необходимо будет отключить веб-сервер Apache (если он у вас используется) или изменить его порт с 80 (который используется по умолчанию) на другой свободный порт.
По умолчанию брандмауэр закрывает все неразрешённые входящие подключения. Поэтому, чтобы к вашему веб-серверу можно было получить доступ извне, необходимо добавить его порт в исключения:
sudo ufw allow in 80/tcp
После того, как Nginx будет запущен, он будет доступен по адресу сервера, на который он устанавливался. Вы можете проверить, всё ли работает, просто перейдя по адресу сервера, введя его в браузере. Для примера Nginx был установлен на localhost:
Если вы увидите приветственное сообщение как на скриншоте выше это означает что Nginx успешно установлен и запущен.
Следующим шагом будет установка интерпретатора языка программирования PHP и всех необходимых модулей для работы с PHP-FPM. Для установки всех необходимых модулей выполните команду:
sudo apt -y install php7.4 php7.4-cli php7.4-fpm php7.4-json php7.4-pdo php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php-pear php7.4-bcmath
На момент написания статьи (1 августа 2021) актуальной версией PHP в официальных репозиториях Ubuntu считалась версия 7.4. Самая же последняя официальная версия PHP от разработчиков 8.0.9 (по состоянию на 29 июля 2021 года). После установки всех необходимых пакетов проверяем статус PHP-FPM:
systemctl status php7.4-fpm.service
sudo systemctl start php7.4-fpm.service
После того, как сервис запустился, установка будет считаться выполненной.
Чтобы принимать запросы FastCGI от Nginx, PHP-FPM может прослушивать сокет TCP/IP или UNIX сокет. Сокеты UNIX являются средством межпроцессного взаимодействия, которое обеспечивает эффективный обмен данными между процессами, работающими в одной и той же операционной системе, в то время как сокеты TCP/IP позволяют процессам обмениваться данными по сети.
В отличие от сокета TCP/IP, который идентифицирует сервер по IP-адресу и порту (например, 127.0.0.1:9000), вы можете привязать сервер к сокету UNIX, используя путь к файлу (например, /run/php-fpm/www.sock), который виден в файловой системе.
Сокет UNIX — это особый тип файла — к нему применяются разрешения на доступ к файлам и каталогам (как в случае с любым другим типом файла UNIX), и его можно использовать для ограничения того, какие процессы на хосте могут читать и записывать в файл, (и, таким образом, общаться с внутренним сервером).
Таким образом, сокет UNIX является безопасным, поскольку его могут использовать только процессы на локальном хосте. Сокет TCP/IP может быть доступен из Интернета, и это может представлять угрозу безопасности, если не будут приняты дополнительные меры безопасности, такие как настройка брандмауэра.
Чтобы настроить PHP-FPM на прослушивание сокета UNIX, откройте файл конфигурации пула PHP-FPM по умолчанию, используя свой любимый текстовый редактор при помощи команды:
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Затем найдите директиву listen и задайте для нее путь к файлу сокета UNIX следующим образом — listen = /run/php/php7.4-fpm.sock
Если вы используете сокет UNIX, вам также необходимо установить соответствующие разрешения на чтение/запись для файла, чтобы разрешить подключения с веб-сервера NGINX. По умолчанию NGINX работает как пользователь www-data в Ubuntu.
Найдите параметры listen.owner и listen.group и задайте им значение www-data. Также установите режим на 0660, для параметра listen.mode.
Хотя сокет UNIX быстрее сокета TCP/IP, он менее масштабируем, поскольку он может поддерживать межпроцессное взаимодействие только в одной и той же ОС. Если NGINX и внутренний сервер приложений (PHP-FPM) работают в разных системах, вам придется настроить PHP-FPM для прослушивания сокетов TCP/IP для удаленного подключения.
В файле конфигурации пула PHP-FPM установите адрес прослушивания, например: 127.0.0.1:9000. Убедитесь, что выбранный вами порт не используется другим процессом или службой в той же системе.
Найдите параметр listen и пропишите адрес — 127.0.0.1:9000:
Сохраните изменения и закройте файл. Установка Nginx php fpm практически завершена.
После того, как вы настроили адрес, который прослушивает PHP-FPM, вам нужно настроить Nginx для запроса прокси к нему через этот адрес, используя параметр конфигурации fastcgi_pass, который располагается в файле конфигурации блока виртуального хоста.
Для примера, возьмем файл конфигурации стандартной странички сайта nginx которая открывается при первом запуске nginx, расположенный по следующему пути — /etc/nginx/conf.d/default.conf, откроем его для редактирования:
sudo nano /etc/nginx/conf.d/default.conf
Если вы настроили PHP-FPM для прослушивания на сокете UNIX, найдите блок местоположения для обработки файлов .php и установите следующие параметры для fastcgi:
location ~ .php$ {fastcgi_pass unix:/run/php-fpm/www.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include /etc/nginx/fastcgi_params;}
Если используется TCP/IP сокет, замените значение в параметре fastcgi_pass на IP-адрес и порт сервера, на котором работает PHP-FPM FastCGI:
location ~ .php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include /etc/nginx/fastcgi_params;}
После внесения изменений в конфигурации Nginx проверьте правильность синтаксиса при помощи команды:
sudo nginx -t
Далее вам необходимо перезапустить службы, чтобы применить изменения, используя для этого команды:
sudo systemctl restart nginxsudo systemctl restart php7.4-fpm
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm
После перезапуска служб, подключение считается выполненным успешно. Для дальнейшей настройки PHP-FPM воспользуйтесь статьей по настройке PHP-FPM на Ubuntu 20.04 – Настройка PHP-FPM
Чтобы полностью удалить Nginx и PHP-FPM из системы, достаточно удалить все пакеты, которые вы установили ранее:
sudo apt -y purge nginx php7.4 php7.4-cli php7.4-fpm php7.4-json php7.4-pdo php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php-pear php7.4-bcmath
Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.
В этой статье мы разобрали, как выполняется установка Nginx PHP-FPM в Ubuntu 20.04. Как видите, это не очень сложно и с такой задачей может справиться даже новичок. Если у вас остались вопросы, оставляйте их в комментариях!
Источник: https://losst.ru/ Материал распространяется под лицензией CC-BY-SA
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies