Nginx — это один из самых востребованных веб-серверов с открытым исходным кодом. Зачастую он используется как веб-сервер, обратный или почтовый прокси-сервер.
Установка Nginx
Для установки сервера Nginx понадобится локальная машина либо облачный сервер с установленной операционной системой Ubuntu. Программа доступна в официальных репозиториях Ubuntu по умолчанию. Установить её можно непосредственно из них, используя систему управления пакетами apt.
Для начала обновляем систему:
|
1 2 |
apt update apt upgrade |
После окончания процесса обновления пакетов устанавливаем сам NGINX:
|
1 |
sudo apt install nginx |
добавляем программу в автозагрузку:
|
1 |
sudo systemctl enable nginx |
проверяем, что веб-сервер успешно установлен и работает, а также добавлен в автозагрузку. Проверим статус работы веб-сервера:
|
1 |
sudo service nginx status |
Строка «Active: active (running)…» указывает на успешную работу сервера. Есть и другой способ проверить его работу. Нужно вставить IP-адрес сервера в адресную строку браузера. Если результат будет таким же, как на картинке ниже, то веб-сервер работает успешно.
Теперь проверим его наличие в автозагрузке:
Если в ответ на выполненную команду получаем «enabled», значит веб-сервер добавлен в автозагрузки.
Для работы с установленным веб-сервером пригодятся базовые команды управления. Они приведены в таблице ниже.
Настройка брандмауэра
Установка и настройка брандмауэра позволит закрыть все порты, кроме необходимых нам — 22 (SSH), 80 (HTTP), 443 (HTTPS). Первый протокол необходим для подключения к удаленному серверу. Второй и третий необходим для связи между клиентом и сайтом. Главное их отличие в том, что HTTPS — это зашифрованный HTTP. Шифрование данных происходит благодаря SSL-сертификату.
Установим утилиту UFW:
|
1 |
sudo apt install ufw |
После успешной установки добавим веб-сервер в список доступных приложений брандмауэра:
|
1 |
sudo nano /etc/ufw/applications.d/nginx.ini |
Заполним файл следующим образом:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[Nginx HTTP] title=Web Server description=Enable SSH traffic ports=22/tcp title=Web Server description=Enable NGINX HTTP traffic ports=80/tcp [Nginx HTTPS] \ title=Web Server (HTTPS) \ description=Enable NGINX HTTPS traffic ports=443/tcp [Nginx Full] title=Web Server (HTTP,HTTPS) description=Enable NGINX HTTP and HTTPS traffic ports=80,443/tcp |
Проверим список доступных приложений:
|
1 |
sudo ufw app list |
Если среди них есть веб-сервер, значит всё сделано верно. Теперь нужно запустить брандмауэр и разрешить передачу трафика по вышеуказанным портам:
|
1 2 3 |
sudo ufw enable sudo ufw allow 'Nginx Full' sudo ufw allow 'OpenSSH' |
Чтобы проверить изменения, вводим команду:
|
1 |
sudo ufw status |
Если всё сделано правильно, то в статусе будут перечислены все порты, которые нам необходимы.
Настройка Nginx
Администрирование веб-сервера представляет из себя изменение и поддержку конфигурационных файлов. Среди них 1 файл конфигурации и 2 каталога. Это nginx.conf, sites-available и sites-enabled соответственно. Все они лежат в директории /etc/nginx.
Файл nginx.conf — это главный конфигурационный файл. Каталог sites-available содержит файлы конфигураций виртуальных хостов. Каждый отдельный файл хранит информацию об определенном сайте. Это его имя, IP-адрес и другие данные. Каталог sites-enabled, в свою очередь, состоит только из конфигураций активных сайтов. Только из директории sites-enabled читаются файлы конфигурации для виртуальных хостов. Также в ней хранятся ссылки на sites-available. Такая структура позволяет временно отключать сайты без потери их конфигураций.
Главный файл конфигурации. Открываем в редакторе:
|
1 |
sudo nano /etc/nginx/nginx.conf |
После выполнения команды откроется файл, разделенный на модули.
Каждый отдельный модуль — это директива, которая отвечает за определенные настройки веб-сервера. Они бывают простыми и блочными. Блочные директивы, помимо имени и параметров, хранят набор дополнительных инструкций, размещенных внутри фигурных скобок.
Перечислим некоторую часть директив главного конфигурационного файла:
user— это пользователь, от которого осуществляются все рабочие процессы.worker_processes— число рабочих процессов сервера. Оно должно быть не больше, чем количество ядер процессора. Параметрautoустановит число автоматически.pid— файл с номером главного процесса (скорее всего вы никогда не будете им пользоваться).include— отвечает за подключение иных файлов конфигурации, удовлетворяющих заданной маске.events— контекст, состоящий из директив, влияющих на работу сетевого соединения.worker_connections— максимальное число одновременно работающих соединений одного рабочего процесса.multi_accept— флаг, который может быть как включен (on), так и выключен (off). Если он включен, то рабочий процесс будет принимать все новые соединения, иначе только одно.use— указывает метод обработки соединений. По умолчанию сервер выбирает наиболее подходящий и эффективный.
http— контекст, состоящий из директив, отвечающих за работу HTTP-сервера.sendfile— включает (on) или отключает (off) метод отправки данных sendfile().tcp_nopush,tcp_nodelay— параметры, влияющие на производительность. Первый заставляет сервер отправлять заголовки HTTP-ответов одним пакетом, а второй позволяет не буферизировать данные и отправлять их короткими очередями.keepalive_timeout— параметр, отвечающий за время ожидания keep-alive соединения до его разрыва со стороны сервера.keepalive_requests— максимальное число запросов по одному keep-alive соединению.error_log— лог ошибок веб-сервера. Для сбора ошибок в определенной секции (http, server и т.д.) необходимо разместить директиву внутри нее.gzip— сжатие контента.
Настройка виртуальных хостов
На сервере может быть расположено множество сайтов. Все запросы приходят на его IP-адрес, а после веб-сервер определяет, какой дать ответ, в зависимости от домена. Виртуальные хосты предназначены для того, чтобы сервер понимал, что и к какому домену относится. В качестве примера создадим сайт testsite.dev.
|
1 2 3 |
mkdir -p /var/www/testsite.dev/html # оздадаём папку для сайта nano /var/www/testsite.dev/html/index.html # после добавим индексный файл |
Заполним его минимальными данными для отображения сайта:
|
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html lang="ru"> <head> <title>testsite.dev</title> <meta charset="utf-8"> </head> <body> <h1>Hello, user</h1> </body> </html> |
После создадим конфигурационный файл сайта в папке sites-available:
|
1 |
sudo nano /etc/nginx/sites-available/testsite.dev.conf |
Заполним его простейшей конфигурацией:
|
1 2 3 4 5 6 7 8 |
server { listen 80; listen [::]:80; server_name testsite.dev www.testsite.dev; root /var/www/testsite.dev/html; index index.html index.xml; } |
Последнее — это создать ссылку в директории sites-enabled на конфигурацию сайта testsite.dev, чтобы добавить его из доступных во включенные:
|
1 |
sudo ln -s /etc/nginx/sites-available/testsite.dev.conf /etc/nginx/sites-enabled/ |
После создания виртуального хоста проведем тестирование конфигурации:
|
1 |
sudo nginx -t |
Отключим сайт по умолчанию, удалив запись о дефолтном виртуальном хосте:
|
1 |
sudo rm /etc/nginx/sites-enabled/default |
Стоит уточнить, что после того, как мы отключим сайт по умолчанию, Nginx будет использовать первый встреченный серверный блок в качестве резервного сайта (то есть по IP-адресу сервера будет открываться самый первый сайт из конфигурации Nginx).
Перезагружаем веб-сервер:
|
1 |
sudo systemctl restart nginx |
Проверим, что всё было сделано верно и сайт работает. Для этого можно вставить IP-адрес сервера или домен, если он зарегистрирован, в адресную строку браузера:
Другой вариант — воспользоваться командой curl:
Заключение
Это только базовая, первоначальная настройка. На самом деле паменторов как для всего сервера, так и для каждого из виртуальных хостов очень много. Поэтому настройку можно произвести с ювелирной точностью! Кроме этого, сервер подготовлен к переходу на зашифрованный протокол данных. Для этого нужно получить SSL-сертификат и настроить переадресацию с HTTP-протокола на HTTPS (443 порт). Для настройки защищенного соединения вам будет необходим сертификат SSL.