Nginx php модуль

Nginx php модуль Хостинг

Nginx — простой, но в тоже время быстрый и надежный веб-сервер, не перегруженный лишними функциями и отлично подходящий для работы в высоконагруженных системах. Особую популярность он завоевал как кеширующий прокси, позволяя существенно снизить нагрузку, на стоящий за ним веб-сервер, чаще всего Apache, но сегодня он все чаще используется как самостоятельный сервер. В нашей статье мы расскажем, как настроить Nginх для работы с PHP-приложениями при помощи менеджера процессов PHP-FPM на платформе Debian/Ubuntu.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Сразу охладим некоторые горячие головы — бытует мнение что Nginx быстрее Apache и вообще является чуть ли не панацеей от всех проблем. Но это не так. Nginx первоначально разрабатывался как кеширующий прокси и поэтому отлично справляется со своей основной задачей — кешированием и отдачей статического содержимого, что в общем-то и является основной задачей веб-сервера. В силу своей архитектуры он показывает выдающуюся производительность при множественных запросах даже в условиях ограниченных ресурсов.

В тоже время Nginx не умеет обрабатывать динамическое содержимое, для этого он должен отдать запрос серверу приложений одним из поддерживаемых способов, например, через FastCGI, дождаться и получить ответ, а затем уже отдать его клиенту. В среднем, что касается производительности PHP, то FastCGI будет в среднем в 10-15% медленнее, чем Apache + mod-php. Поэтому, если производительность вашего сервера упирается в производительность PHP, то никакой Nginx вам не поможет, а наоборот, только усугубит ситуацию.

Кроме того, работа с Nginx более сложна, чем с Apache, если с последним все популярные веб-движки работают из коробки, то для полноценной работы с Nginх может потребоваться дополнительная настройка. Исходя из этого мы не рекомендуем использовать Nginx, как самостоятельный веб-сервер, начинающим веб-мастерам, так как при отсутствии опыта и квалификации довольно трудно понять, связана ошибка с веб-приложением или веб-сервером. Да и на форумах для новичков вам вряд ли кто-нибудь подскажет по такой связке, а там, где «тусуются» работающие с Nginx специалисты подобные вопросы обычно не поднимаются, так как участники давно их «переросли».

Если вам нужен просто работающий веб-сервер, и вы не готовы глубоко вникать в тему, то лучше обратите свое внимание на Apache, если же вы готовы потратить некоторое время и силы на изучение и настройку, а также готовы самостоятельно решать возникающие проблемы, то добро пожаловать!

Установка Nginx

Несмотря на то, что Nginх присутствует в репозиториях основных дистрибутивов, мы рекомендуем использовать версию от разработчиков, это позволит более оперативно получать новые версии и новые возможности. Существует две ветки Nginx, основная и стабильная, первая имеет нечетную, вторая четную нумерацию. Разработка происходит следующим образом, все изменения основной ветки, скажем 1.7 фиксируются и переходят в стабильную 1.8, которая перестает разрабатываться и получает только обновления безопасности, основная ветка после этого получает номер 1.9 и в нее вносятся все изменения.

Сами разработчики рекомендуют использовать основную ветку, если только нет каких-то особых требований по совместимости. По своему опыту можем сказать, что основная ветка достаточно стабильна и может быть использована на рабочих серверах.

Для подключения репозиториев Nginx создадим в папке /etc/apt/sources.list.d файл nginx.list:

Потом добавим в него строки. Для Debian:

deb http://nginx.org/packages/mainline/debian/ codename nginxdeb-src http://nginx.org/packages/mainline/debian/ codename nginx

deb http://nginx.org/packages/mainline/ubuntu/ codename nginxdeb-src http://nginx.org/packages/mainline/ubuntu/ codename nginx

где codename — кодовое имя дистрибутива, например, jessie для Debian 8 или trusty для Ubuntu 14.04. Если вам не нужны исходные тексты, то репозитории deb-src можно не подключать (т.е. не добавлять эти строки).

Затем скачаем и установим PGP-ключ, необходимый для проверки подлинности:

cdwget http://nginx.org/keys/nginx_signing.keyapt-key add nginx_signing.key

После чего можно обновить список пакетов и установить nginx:

apt-get updateapt-get install nginx

Теперь, если набрать в браузере адрес нашего сервера, вы увидите стандартную заглушку Nginx.

Также проверить состояние веб-сервера можно командой:

service nginx status


Nginx php модуль

Теперь перейдем к настройке. Для этого перейдем в папку /etc/nginx и откроем файл nginx.conf, мы будем перечислять настройки в порядке их нахождения в файле, если данной опции нет — ее следует добавить.

Прежде всего изменим пользователя, от имени которого работает nginx, в Debian/Ubuntu веб-сервер работает от пользователя www-data и чтобы избежать в будущем возможных коллизий с правами доступа приведем строку к виду:

Затем укажем количество рабочих процессов, рекомендуется выбирать их количество по числу доступных процессорных ядер, в нашем случае 2:

worker_processes 2;

Приведем секцию events к виду:

Первая опция задает количество соединений на рабочий процесс, вторая задает метод обработки соединений, явно укажем наиболее эффективный для Linux.

Теперь перейдем в секцию http и после строки

access_log /var/log/nginx/access.log main;

зададим следующие опции:

client_header_timeout 30;client_body_timeout 30;reset_timedout_connection on;

Они задают таймаут (в секундах) на чтение клиентом тела и заголовка запроса, последняя опция разрешает сброс соединений по таймауту.

client_max_body_size 32m;client_body_buffer_size 128k;

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

sendfile on;tcp_nopush on;

Также разрешим передачу файлов и оптимизируем этот процесс.

keepalive_timeout 30;

Он задает таймаут постоянных (keep-alive) соединений, которые позволяют повысить производительность протокола HTTP/1.1, но незакрытое соединений впустую использует ресурсы сервера и поэтому такие соединения следует принудительно завершать.

Ниже зададим параметры gzip-сжатия:

gzip on;gzip_disable «msie6»;gzip_proxied any;gzip_min_length 1024;gzip_comp_level 4;gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/atom+xml application/rdf+xml;

Первая опция включает gzip-сжатие, затем отключаем его для младших версий IE (6 и ниже), если такие вдруг зайдут на наш сервер, разрешим сжимать проксированные запросы, это нужно для сжатия динамического содержимого, затем укажем минимальный размер сжимаемого ответа, чтобы не тратить ресурсы сервера на сжатие коротких ответов. Ниже задается уровень сжатия и типы сжимаемых данных.

В самом конце, после

Это позволит подключать конфигурации виртуальных хостов из папки sites-enabled.

Сохраним и проверим конфиг командой:

После чего можно перезапустить nginx:

service nginx restart

mkdir /etc/nginx/sites-availablemkdir /etc/nginx/sites-enabled

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

Перед тем как описывать виртуальные хосты, создадим структуру папок для их хранения:

mkdir /var/wwwmkdir /var/www/example.org

Затем создадим конфигурационный файл для нашего первого сайта:

Какого-либо стандарта по названию файлов у nginx нет, поэтому можете придерживаться своей системы, главное, чтобы вам было понятно, какой файл за какой сайт отвечает. Теперь откроем его и внесем следующий текст:

Его синтаксис достаточно прост и понятен, первая секция server задает основные параметры сайта, его имя, кодировку, расположение корневой директории и файлов логов. Вторая секция нужна для перенаправления сайта с www на без www.

Директива index указывает индексные файлы, которые будет искать в данном расположении веб-сервер в порядке их перечисления, так если в директории имеются одновременно index.html и index.php — использоваться всегда будет первый. Указанная конструкция универсальна, но на практике лучше указать один тип индексного файла, тот что реально используется.

Сохраняем конфигурацию и подключаем ее к nginx:

ln -s /etc/nginx/sites-available/example.org.conf /etc/nginx/sites-enabled/

Проверяем конфигурацию и заставим nginx ее перечитать:

nginx -tservice nginx reload

Теперь поместим в корневую директорию сайта файл index.html со следующим содержимым:

Теперь набираем в браузере имя нашего сайта и убеждаемся, что все работает.


Nginx php модуль

Проверим конфигурацию и перезапустим сервер:

Читайте также:  Разблокируйте выгодные предложения по тарифам Sweb — найдите идеальный план для себя

Если теперь снова попробовать обратиться к серверу по IP, то такое соединение будет сброшено.

Устанавливаем PHP-FPM

Для работы с современными веб-приложениями вам потребуется поддержка популярного скриптового языка PHP, Nginx поддерживает работу через FastCGI, но не имеет собственного менеджера процессов, поэтому мы будем использовать для этой цели PHP-FPM.

Важно! В современных дистрибутивах используется более новая версия PHP 7, чтобы работать с новой версией языка вместо php5 в приведенных ниже командах следует указывать php7.x или просто php например, вместо php5-imagick нужно набрать php7.0-imagick или php-imagick.

apt-get install php5-fpm

Все необходимые пакеты и интерпретатор PHP будут установлены по зависимостям. Также имеет смысл сразу установить некоторые модули PHP, например, для работы с графикой:

apt-get install php5-gd php5-imagick

Настройки PHP-FPM по умолчанию достаточно оптимальны и никаких вмешательств в них не требуется, однако следует подправить некоторые опции PHP, для этого откроем /etc/php5/fpm/php.ini и найдем там следующие опции:

post_max_size = 8M

этот параметр задает максимальный размер данных загружаемых методом POST, влияет, например, на размер загружаемых средствами PHP файлов. По умолчанию 8 МБ, можем изменить по собственным потребностям.

Если вы будете использовать PHP-приложения (CMS) работающие в кодировке отличной от UTF-8, то приведите к следующему виду опцию:

default_charset = «»

Затем раскоменнтируйте и установите опцию:

Это закроет возможную уязвимость в PHP.

Еще ниже надо найти и увеличить размер максимально загружаемого файла:

upload_max_filesize = 8M

Данное значение должно быть больше или равно значению post_max_size, иначе вы будете ограничены в загрузке файлов меньшим из указанных в этих опциях размером.

Сохраним изменения и перезапустим PHP-FPM:

service php5-fpm restart

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

Если сайтов несколько, то аналогичные настройки потребуется добавить каждому виртуальному хосту, поэтому, чтобы не делать лишних действий, имеет смысл вынести данные настройки в шаблон и подключать к виртуальному хосту уже его. Такой подход имеет еще один плюс, если вам потребуется изменить настройки, то делать это придется только в одном месте.

Создадим директорию для хранения шаблонов:

После чего создадим в ней шаблон для работы с PHP-FPM:

Откроем его и добавим следующий текст:

Указанный нами блок location будет обрабатывать все запросы к php-файлам, первая директива в нем проверяет наличие запрошенного файла, в противном случае отдавая ошибку 404. Вторая устанавливает параметры соединения с FastCGI-шлюзом, в нашем случае с PHP-FPM, соединение устанавливается через UNIX-сокет, как наиболее производительный способ соединения. Затем указывается индексный файл и подгружаются настройки Nginx для FastCGI.

Важно! Обратите внимание, что PHP 7 имеет иной путь к UNIX-сокету, поэтому следует указывать /var/run/php/php7.0-fpm.sock

В принципе этого уже достаточно, чтобы работать с динамическим содержимым, но не будем спешить и добавим в файл еще несколько блоков.

Несмотря на то, что Nginx не использует htaccess-файлы, они, вместе с файлами htpasswd могут находиться в директории сайта, особенно если до этого он работал на Apache и будет правильно запретить доступ к ним в целях безопасности.

Также следует настроить кэширование статического содержимого:

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

Также зададим кэширование для скриптов и стилей:

Для них установим срок кэширования в 3 часа, что позволит соблюсти баланс между скоростью применения возможных изменений в этих файлах и уменьшением количества запросов к вашему сайту.

Теперь откроем файл конфигурации виртуального хоста и в конце первой секции server добавим строку подключения шаблона:

Сохраним все настройки, проверим конфигурацию и перезапустим Nginx.

Чтобы проверить работу PHP создадим в корневой директории сайта файл test.php со следующим содержимым:

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

Установка MySQL и phpMyAdmin

СУБД MySQL широко используется для хранения информации в современных веб-приложениях. Это один из самых важных компонентов веб-сервера, так как в базе данных обычно хранится вся информация сайта, кроме статического содержимого (изображений, файлов и т.п.).

Для установки MySQL выполните:

apt-get install mysql-server php5-mysql

Важно! В свежих выпусках Debian (и его производных) вместо пакета mysql-server следует установить mariadb-server, который полностью совместим с MySQL.

Данная команда установит MySQL сервер и модуль PHP для работы с ним. В процессе установки вас попросят ввести пароль суперпользователя СУБД (root), не путать с суперпользователем системы.

Для этого создадим еще один файл шаблона:

и внесем в него следующий текст:

На первый взгляд синтаксис может показаться довольно сложным, но если разобрать правила по частям, то мы увидим, что ничего сложного нет. Все это мы уже обсуждали выше.


Nginx php модуль

В Ubuntu Server вы можете столкнуться с ошибкой отсутствия расширения mcrypt.

Для ее устранения выполните:

ln -s /etc/php5/mods-available/mcrypt.ini /etc/php5/fpm/conf.d/service php5-fpm restart

На этом настройку нашего сервера можно считать законченной. При переносе или размещении на нем новых сайтов не забывайте правильно устанавливать права и владельца. Стандартный набор прав: 644 для файлов и 755 для папок, его можно быстро установить командой:

chmod -R u=rw,g=r,o=r,a+X /var/www/example.org

Но учтите, что некоторые CMS требуют нестандартных прав на некоторые папки и файлы, поэтому уточните этот вопрос в документации.

Также не забывайте устанавливать правильного владельца, им должен быть пользователь, от имени которого работает веб-сервер, в нашем случае www-data, владелец устанавливается командой:

chown -R www-data:www-data /var/www/example.org

Обычно данных мер достаточно, но встречаются CMS которые требуют дополнительной настройки для работы с Nginx, в этом случае следует обратиться к документации или на форум поддержки движка. Поэтому мы еще раз повторимся, что данное решение требует определенного опыта и квалификации и не рекомендуется начинающим, а также тем, кто не хочет возиться с настройками, а хочет быстро получить работающий сайт.

23 сентября, 2020 11:58 дп

LAMP Stack, LEMP Stack, Ubuntu

Серверы с поддержкой адресов IPv4 и IPv6 можно настроить для обслуживания веб-сервера Apache по одному протоколу и Nginx – по другому. Но это не очень практично, так как IPv6 до сих пор не получил широкого распространения. Можно также установить другой номер порта для второго веб-сервера, но использовать порты в ссылках очень неудобно (http://your_domain:81).

Этот мануал поможет настроить Nginx как веб-сервер и прокси-сервер для Apache на одном сервере Ubuntu 20.04.

При этом вам может понадобиться изменить код приложения, чтобы включить поддержку обратного прокси в Apache (особенно это касается сайтов с поддержкой SSL). Чтобы избежать этого, можно установить специальный модуль Apache, mod_rpaf, который переопределяет некоторые переменные среды, благодаря чему Apache может напрямую обслуживать запросы клиентов.

Мы покажем, как разместить четыре домена в рамках одного сервера. Два из них будут обслуживаться Nginx: nginx1.your_domain (стандартный виртуальный хост) и nginx2.your_domain. Другие два обслуживаются Apache: apache1.your_domain и apache2.your_domain. Мы также настроим Apache для поддержки PHP-приложений по PHP-FPM, что обеспечивает лучшую производительность по сравнению с mod_php.

Требования

Сначала нужно установить Apache и PHP-FPM. Также для работы вам понадобится модуль Apache для PHP FastCGI под названием libapache2-mod-fastcgi.

Обновите индекс пакетов:

sudo apt update

Установите необходимые пакеты:

sudo apt install apache2 php-fpm

Модуль Apache FastCGI недоступен в репозитории Ubuntu, поэтому загрузите его с kernel.org и установите с помощью команды dpkg.

sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb

Настройка Apache и PHP-FPM

Теперь нужно настроить порт Apache (8080) и подготовить веб-сервер к поддержке PHP-FPM с помощью модуля mod_fastcgi. Переименуйте конфигурационный файл Apache ports.conf:

sudo mv /etc/apache2/ports.conf /etc/apache2/ports.conf.default

Создайте новый файл ports.conf и укажите в нем порт 8080.

Отключите стандартный файл:

sudo a2dissite 000-default

Создайте новый виртуальный хост на основе стандартного файла:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/001-default.conf

Откройте новый файл:

sudo nano /etc/apache2/sites-available/001-default.conf

Измените прослушиваемый порт на 8080:

Сохраните и закройте файл. Включите новый файл:

sudo a2ensite 001-default

sudo systemctl reload apache2

Установите пакет net-tools:

sudo apt install net-tools

Убедитесь, что веб-сервер прослушивает нужный порт:

Читайте также:  Получите оптимальную производительность с лучшими провайдерами VPS-серверов

sudo netstat -tlpn

Вывод команды должен выглядеть так:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address     Foreign Address      State    PID/Program name
tcp        0      0 0.0.0.0:22        0.0.0.0:*            LISTEN   1086/sshd
tcp6       0      0 :::8080           :::*                 LISTEN   4678/apache2
tcp6       0      0 :::22             :::*                 LISTEN   1086/sshd

Настройка модуля mod_fastcgi

По умолчанию Apache обслуживает PHP-страницы с помощью модуля mod_php. Но в данном случае нам нужен дополнительный модуль для PHP-FPM.

Примечание: Если вы выполняете мануал на сервере со стеком LAMP и включенным модулем mod_php, сначала отключите его:

sudo a2dismod php7.4

Добавьте блок настроек для mod_fastcgi. Он зависит от mod_action. Чтобы включить mod_action, введите:

sudo a2enmod actions

Переименуйте существующий конфигурационный файл FastCGI:

sudo mv /etc/apache2/mods-enabled/fastcgi.conf /etc/apache2/mods-enabled/fastcgi.conf.default

Создайте новый файл:

sudo nano /etc/apache2/mods-enabled/fastcgi.conf

Добавьте в файл следующие директивы для передачи запросов к файлам .php на сокет PHP-FPM UNIX:

Сохраните изменения и проверьте ошибки в файле:

sudo apachectl -t

Примечание: Если вы получили предупреждение

Could not reliably determine the server’s fully /
qualified domain name, using 127.0.1.1. Set the /’ServerName’ directive globally/
to suppress this message.

Проигнорируйте его пока что. Мы настроим директиву ServerName чуть позже.

Если команда вернула Syntax OK, перезапустите Apache.

Тестирование PHP

Убедитесь, что PHP работает должным образом. Для этого создайте файл /var/www/html/info.php и откройте его в браузере.

В файл нужно поместить функцию:

Чтобы открыть порт в брандмауэре, введите команду:

sudo ufw allow 8080

Поскольку мы собираемся защитить наши домены Apache, давайте проверим, поддерживает ли брандмауэр трафик TLS на порт 443.

Включите профиль Apache Full, чтобы разрешить трафик на порты 80 и 443:

sudo ufw allow «Apache Full»

Теперь проверьте статус вашего брандмауэра:

sudo ufw status

Если вы выполнили предварительные требования к мануалу, результат будет выглядеть так:

To                         Action      From
—                         ——      —-
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
8080                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)
8080 (v6)                  ALLOW       Anywhere (v6)

Теперь откройте info.php  в браузере:

На экране появится список настроек PHP.

В верхней части страницы найдите Server API, в этой строке должно быть указано FPM/FastCGI. Затем найдите раздел PHP Variables, строку SERVER_SOFTWARE. Она должна содержать Apache и Ubuntu. Это подтверждает, что mod_fastcgi включен и Apache поддерживает PHP-FPM для обработки файлов PHP.

Создание виртуального хоста Apache

Создайте виртуальные хосты Apache для доменов apache1.your_domain и apache2.your_domain. Сначала создайте корневые каталоги для этих сайтов.

sudo mkdir -v /var/www/apache1.your_domain /var/www/apache2.your_domain

Создайте index-файлы для каждого сайта:

Чтобы протестировать PHP, создайте файл phpinfo() для каждого сайта.

Затем создайте файл виртуального хоста для домена apache1.your_domain.

sudo nano /etc/apache2/sites-available/apache1.your_domain.conf

Поместите в него следующие строки:

Строка AllowOverride All включает поддержку .htaccess.

Теперь файл содержит базовые директивы виртуального хоста.

Сохраните и закройте файл. Теперь создайте такой же файл для apache2.your_domain.

sudo nano /etc/apache2/sites-available/apache2.your_domain.conf

Вставьте в него такие строки:

Итак, теперь виртуальные хосты Apache готовы. Чтобы включить сайты, используйте команду a2ensite, которая создаст симлинки на виртуальные хосты в каталоге sites-enabled.

sudo a2ensite apache1.your_domain
sudo a2ensite apache2.your_domain

Проверьте синтаксис Apache:

Если ошибок нет, перезапустите веб-сервер:

Если в синтаксисе обнаружены ошибки, сначала исправьте их.

Чтобы убедиться, что сайты работают и каждый сайт отображает содержимое файла index.html, откройте в браузере:

На экране появится:

Apache 1

Теперь убедитесь, что PHP работает. Для этого откройте файлы info.php каждого сайта в браузере. Эти файлы доступны по ссылкам:

На экране должен появиться список настроек PHP (как в шаге 4).

Теперь Apache обслуживает два сайта по порту 8080. Перейдем к настройке Nginx.

Установка и настройка Nginx

Теперь нужно установить Nginx и настроить виртуальные хосты для доменов nginx1.your_domain и nginx2.your_domain.

sudo apt install nginx

Удалите симлинк стандартного виртуального хоста, он в дальнейшем не понадобится нам.

sudo rm /etc/nginx/sites-enabled/default

Теперь нужно создать новые виртуальные хосты для сайтов. Мы будем следовать той же процедуре, которую использовали для настройки Apache. Сначала создайте каталоги для них:

Затем создайте файлы index и phpinfo():

Теперь создайте виртуальный хост для nginx1.your_domain.

sudo nano /etc/nginx/sites-available/nginx1.your_domain

Сохраните и закройте файл. Теперь создайте виртуальный хост для nginx2.your_domain.

sudo nano /etc/nginx/sites-available/nginx2.your_domain

Вставьте в этот файл такие строки:

Сохраните и закройте файл. Чтобы включить сайты, создайте симлинки для них:

sudo ln -s /etc/nginx/sites-available/nginx1.your_domain /etc/nginx/sites-enabled/nginx1.your_domain
sudo ln -s /etc/nginx/sites-available/nginx2.your_domain /etc/nginx/sites-enabled/nginx2.your_domain

Проверьте синтаксис Nginx:

sudo nginx -t

sudo systemctl reload nginx

Теперь попробуйте открыть в браузере файлы phpinfo() для виртуальных хостов Nginx.

Проверьте раздел PHP Variables.

Теперь веб-сервер Nginx установлен и поддерживает два сайта.

Настройка Nginx для поддержки виртуальных хостов Apache

Теперь нужно создать дополнительный виртуальный хост Nginx для нескольких доменов в директиве server_name. Запросы к этим доменам будут проксироваться на Apache.

sudo nano /etc/nginx/sites-available/apache

Добавьте в него следующий блок настроек. Он задаёт имена сайтов Apache и проксирует их запросы. В proxy_pass укажите внешний IP.

Сохраните и закройте файл. Создайте симлинк:

sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache

Проверьте настройки на наличие ошибок:

Перезапустите Nginx, если ошибок не обнаружено.

Откройте браузер и перейдите по ссылке:

Теперь Apache использует Nginx в качестве обратного прокси-сервера. Нужно установить переменную Apache, REMOTE_ADDR. Она позволяет «скрыть» прокси-сервер.

Установка и настройка модуля mod_rpaf

Теперь нужно установить модуль mod_rpaf, который будет переопределять значения REMOTE_ADDR, HTTPS и HTTP_PORTс помощью значений, предоставленных обратным прокси-сервером. Без этого модуля некоторые приложения PHP

могут потребовать изменений в коде. Модуль можно найти в репозитории Ubuntu, его пакет называется libapache2-mod-rpaf. Однако этот пакет устаревший и не поддерживает некоторых директив. Потому лучше скомпилировать модуль из исходного кода.

Чтобы собрать модуль, установите пакеты:

sudo apt install unzip build-essential apache2-dev

Загрузите последний релиз с GitHub:

Перейдите в рабочий каталог:

Скомпилируйте и установите модуль:

make
sudo make install

В каталоге mods-available создайте файл для модуля rpaf.

sudo nano /etc/apache2/mods-available/rpaf.load

Вставьте в файл следующую строку:

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so

Создайте файл для настроек модуля:

sudo nano /etc/apache2/mods-available/rpaf.conf

Добавьте в конфигурационный файл следующие строки:

Этот файл содержит следующие настройки:

Примечание: Подробную информацию о настройках вы найдете в README модуля.

Сохраните файл rpaf.conf и включите модуль:

sudo a2enmod rpaf

Эта команда создаст символьную ссылку файлов rpaf.load и rpaf.conf в каталоге mods-enabled. Проверьте настройки:

Перезапустите Apache, если ошибок не обнаружено.

Откройте страницу phpinfo() одного из сайтов Apache и найдите раздел PHP Variables. Переменная REMOTE_ADDR теперь должна содержать IP локального сервера.

Поддержка HTTPS с помощью Let’s Encrypt (опционально)

Теперь нужно создать SSL-сертификаты для сайтов Apache. Получите бесплатные доверенные сертификаты от Let’s Encrypt.

Nginx поддерживает терминацию SSL, потому можно настроить SSL, не изменяя настроек Apache.

Модуль mod_rpaf установит все переменные Apache, необходимые для поддержки SSL.

Отредактируйте файл, создав блок server для apache1.your_domain and apache2.your_domain:

Сертификаты TLS/SSL можно сгенерировать с помощью клиента Certbot. Его плагин для Nginx автоматически перенастроит веб-сервер и обновит конфигурационный файл.

sudo snap install —classic certbot

Затем используйте команду certbot, чтобы сгенерировать сертификаты для apache1.your_domain и www.apache1.your_domain:

sudo certbot —agree-tos —no-eff-email —email your-email —nginx -d apache1.your_domain -d www.apache1.your_domain

С помощью этой команды Certbot сможет использовать плагин nginx; флаг –d позволяет указать домены, для которых предназначен сертификат.

Выполните следующую команду для второго домена:

sudo certbot —agree-tos —no-eff-email —email your-email —nginx -d your_domain -d www.apache2.your_domain

Попробуйте открыть один из этих сайтов в браузере с префиксом https://.

На появившейся странице найдите раздел PHP Variables. Для переменной SERVER_PORT установлено значение 443, а HTTPS – on, как если бы веб-сервер Apache был напрямую доступен через HTTPS.

Теперь давайте отключим прямой доступ к Apache.

Блокирование прямого доступа к Apache (опционально)

sudo iptables -I INPUT -p tcp —dport 8080 ! -s your_server_ip -j REJECT —reject-with tcp-reset

Теперь порт 8080 блокируется брандмауэром, и доступ к Apache закрыт.

Откройте браузер и попробуйте получить доступ к одному из сайтов Apache.

Браузер должен выдать сообщение об ошибке «Unable to connect» или «Webpage is not available». Директива tcp-reset позволяет скрыть от посторонних разницу между портами.

Примечание: Правила IPtables сбрасываются при каждой перезагрузке сервера. Чтобы сохранить их, используйте iptables-persistent.

Читайте также:  Компания занимается хостингом и бесплатным хостингом на «Бегете». Как скачать, перетащить и установить WordPress

Обслуживание статических файлов с помощью Nginx (опционально)

Когда Nginx проксирует запросы доменов Apache, он отправляет Apache запрос каждого файла. Nginx быстрее, чем Apache, обслуживает статические файлы (изображения, JavaScript, стили). Отредактируйте виртуальный хост apache, чтобы настроить отправку PHP-запросов.

Откройте файл apache:

Добавьте два блока location в каждый блок server и отредактируйте существующие блоки location.

Примечание: Вы можете просто заменить содержимое файла предложенными ниже конфигурациями.

Также нужно указать Nginx, где хранятся статические файлы каждого сайта.

Чтобы настроить поддержку HTTPS, используйте такую конфигурацию:

Директива try_files позволяет Nginx просматривать файлы в document root и сразу обслуживать их. Если файл имеет расширение .php, запрос будет передан Apache. Даже если файл не найден в корневом каталоге, запрос будет передан Apache, чтобы такие функции приложения, как постоянные ссылки, работали без проблем.

Внимание! Директива location ~ /. очень важна. Она блокирует обслуживание файлов .htaccess и .htpasswd.

Сохраните и закройте файл. Проверьте код на наличие ошибок:

sudo service nginx reload

Убедитесь, что всё работает. Откройте лог-файлы Apache (/var/log/apache2) и просмотрите запросы GET для файлов info.php сайтов apache2.your_domain и apache1.your_domain. Команда tail выведет последние строки файла, а флаг –f покажет его изменения.

sudo tail -f /var/log/apache2/other_vhosts_access.log

А затем проверьте ответ лога. Apache вернёт:

Проверьте страницу index.html каждого сайта. Вы не увидите записей от Apache. Все запросы обрабатывает Nginx.

Чтобы остановить команду tail, нажмите CTRL+C.

Единственным недостатком этой настройки является то, что Apache не сможет ограничивать доступ к статическим файлам. Доступ можно ограничить с помощью файла виртуального хоста apache.

15 марта, 2023 11:46 дп

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

Этапы настройки PHP-FPM с NGINX

Nginx не знает, как запустить свой PHP-скрипт. Для эффективного управления этими скриптами ему нужен PHP-модуль (например PHP-FPM). P HP-FPM работает вне среды NGINX, создавая отдельный процесс. Поэтому, когда пользователь запрашивает страницу PHP, сервер nginx передает запрос службе PHP-FPM с помощью FastCGI. Установка php-fpm в Ubuntu зависит от PHP и его версии. Перед установкой FPM на ваш сервер следует проверить документацию установленной версии PHP. Предположим, что вы установили последнюю версию PHP 7.3, значит вы можете установить FPM с помощью следующей команды apt-get:

# apt-get install php7.3-fpm

Сервис FPM запустится автоматически после завершения установки. Чтобы проверить его статус, выполните следующую команду systemd:

# systemctl status php7.3-fpm

php7.3-fpm.service — The PHP 7.3 FastCGI Process Manager
  Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
  Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago

Main PID: 32210 (php-fpm7.3)
  Status: «Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec»
   Tasks: 3 (limit: 1152)

          ├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
          ├─32235 php-fpm: pool www  
           └─32236 php-fpm: pool www

Настройка пула PHP-FPM

Сервис php-fpm создает пул по умолчанию, конфигурация которого (www.conf) находится в папке /etc/php/7.3/fpm/pool.d. Вы можете настроить пул по умолчанию в соответствии с вашими требованиями. Также рекомендуется создавать индивидуальные пулы для более эффективного управления ресурсами каждого процесса FPM. Кроме того, отделение пулов FPM позволит им работать независимо друг от друга, создавая собственный мастер-процесс. Это означает, что каждое php-приложение может иметь свои параметры кэша. Изменение конфигурации одного пула не требует запуска или остановки остальных пулов FPM.

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

Теперь перейдите в каталог конфигурации FPM и создайте файл настроек с помощью любого текстового редактора, например vi:

# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf

listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data

; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s

Рассмотрим подробнее приведенные выше параметры конфигурации FPM и их значения:

Настройки менеджеров процессов в приведенном выше файле конфигурации пула установлены как “dynamic”. Выберите параметр, который лучше всего соответствует вашим требованиям. Существуют также и другие конфигурации для менеджера процессов:

После создания файла конфигурации необходимо перезапустить сервис fpm, чтобы применить новые настройки:

# systemctl start php7.3-fpm

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

Настройка NGINX для PHP-FPM

listen       80;

        root         /var/www/html/wordpress;

        error_log  /var/log/nginx/example.journaldev.com-error.log error;
         index index.html index.htm index.php;

                     try_files $uri $uri/ /index.php$is_args$args;


Nginx php модуль

Убедитесь, что приведенные выше параметры конфигурации синтаксически верны, и перезапустите NGINX.

# nginx-t
# systemctl restart nginx

Тестирование конфигурации PHP-FPM NGINX

Для проверки того, использует ли вышеуказанный файл конфигурации NGINX только что созданный пул FPM, создайте файл phpinfo в root каталоге веб-сервера. Мы используем /var/www/html/wordpress в качестве веб-сервера в приведенном выше файле конфигурации NGINX. Измените это значение в соответствии с вашей средой.

# cd /var/www/html/wordpress

В данной статье рассмотрим как установить веб-сервер NGINX и модуль PHP-FPM. Для начала обновим индекс пакетов следующей командой:

Введем пароль администратора.

Далее следующей командой установим nginx:

Теперь если открыть браузер и перейти по адресу localhost наш веб-сервер открывается:

Теперь установим php и модуль php-fpm. Php-fpm это менеджер процессов fast-cgi. Он является альтернативной реализацией режима fast-cgi в php. В связке с nginx обеспечивают более высокую скорость обработки запросов, чем связка nginx + apache, которая используется по умолчанию.

sudo apt install php php-fpm

Далее перейдем к файлам веб-сервера. Они находятся по пути /var/www.

Следующей командой сделаем нашего пользователя владельцем папки:

Перейдем в папку html и создадим папку test.loc:

cd html
mkdir test.loc

Перейдем в неё.

И в ней создадим файл index.php.

Который выведет информацию о php, при помощи функции phpinfo().

Теперь попробуем открыть наш тестовый домен в браузере.


Nginx php модуль

Как мы видим наш домен не открывается. Для того чтобы, домен открывался необходимо добавить список доступных доменов сервера. Для этого перейдем по следующему пути:

В данной папке уже есть стандартный конфиг. Скопируем его следующей командой и назовем test.loc. Выполним эту команду от имени администратора.

sudo cp default test.loc

Теперь отредактируем наш файл. Тоже от имени администратора.

sudo nano test.loc

Удалим лишние строчки. В качестве корневой директории укажем нашу папку. А в качестве главного файла укажем index.php. В поле server_name укажем

наш домен: test.loc.

А теперь, для того, чтобы fast-cgi работал, необходимо раскомментировать некоторые строчки. Так как мы используем модуль php-fpm раcкомментируем строчку напротив php-fpm и раскомментируем последние строчки, для того чтобы запретить доступ .haccess файлам.

В итоге наш конфигурационный файл примет следующий вид:

Теперь перейдем в папку sites-enabled.

cd ./sites-enabled
ls -la

В данной папке уже есть стандартная символьная ссылка. Добавим символьную ссылку к нашему домену. Для этого пропишем следующую команду:

sudo ln -s /etc/nginx/sites-available/test.loc /etc/nginx/sites-enabled/
ls -la

Для того, чтобы изменения вступили в силу перезагрузим nginx следующей командой.

sudo nginx -s reload

Снова попробуем перейти на наш тестовый домен. Как мы видим наш домен не открывается. Для того, чтобы он заработал необходимо добавить запись в файл hosts. Отредактируем файл hosts от имени администратора и добавим следующую строчку:

sudo nano /etc/hosts
127.0.0.1 test.loc


Nginx php модуль

Снова попробуем перейти по нашему домену.

Как мы видим наш домен успешно заработал. А в качестве api сервера используется fpm и fast-cgi.


Nginx php модуль

Изменим наш индексный файл.

Как мы видим все работает.

На этом установка веб-сервера завершена. До встречи в следующих статьях 🙂

Оцените статью
Хостинги