Как установить и настроить веб-сервер Nginx на Ubuntu

Как установить и настроить веб-сервер Nginx на Ubuntu

Сайты в Интернете доступны посетителям благодаря незаметной работе веб-серверов, основная функция которых — обработка входящих запросов. Они распределяют их, затем формируют и отправляют ответные сообщения с запрошенными данными.

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

Немного об Nginx

Nginx (произносится как «engine x») — серверное ПО, обычно выполняющее функции HTTP-сервера, обратного или почтового прокси-сервера, TCP/UDP прокси-сервера общего назначения, но чаще всего его используют как веб-сервер. Более того, на 2024 год это самый популярный сервер: на нём работает 34 % всех сайтов в Интернете. По популярности он опередил даже прежнего лидера и «старичка» среди веб-серверов Apache, разработанного в далёком 1995 году. До появления Nginx в 2002-м на Apache работало 60 % веб-сайтов, сейчас же его распространённость упала до 30 %. На такое перераспределение охвата повлияло то, что разработчики более нового Nginx учитывали ошибки Apache и меняющиеся потребности пользователей.

Многие известные российские платформы работают на Nginx, в том числе Яндекс, Mail.Ru, ВКонтакте и Рамблер.

Nginx — хорошее решение для сайтов со статическим содержимым. Удобно и то, что обработкой запросов, входящих на один и тот же сайт, могут заниматься два веб-сервера одновременно: один будет передавать статические страницы и их части, а второй (например, Apache) — динамические.

Как установить Nginx

Для веб-сервера подойдёт локальный ПК или удалённый сервер с предустановленной ОС на базе Linux (сюда входят Ubuntu, Debian, CentOS), Unix (FreeBSD, облачные ОС), а также его можно поставить на macOS и некоторые версии Windows. Что касается Ubuntu (а также других дистрибутивов Linux), обычно установочный пакет есть в репозитории по умолчанию, и установить его можно прямо из него с помощью системы Advanced Package Tool (apt). Ещё один вариант установки — это сборка из исходных файлов. Такой подход хорош, если нужна поддержка специфических функций, которые будут недоступны при установке из стандартного пакета. Веб-сервер, скомпилированный из исходного кода — это наиболее гибкое решение, но оно доступно только продвинутым пользователям. Мы же рассмотрим процесс установки из репозитория Ubuntu.

  1. Непосредственно перед установкой обновим данные репозитория, для этого введём в терминале:
apt update
  1. Когда обновлённые данные о наличии пакетов загрузятся, можно приступить к установке:
apt install nginx
  1. Программа установлена, добавим её в список ПО, которое автоматически запускается сразу после запуска системы:
systemctl enable nginx
  1. Теперь нужно убедиться, что процессы завершились успешно, ПО установлено, заработало корректно и есть в списке автозапуска:
service nginx status

Если в выведенных данных вы видите строку, которая начинается с «Active: active (running)…», то это говорит об успешных установке и запуске.

Альтернативный способ выполнить проверку — перейти по IP-адресу сервера в браузере. Если в окне отобразится приветственная страница, то установка прошла правильно.

Приветственное сообщение nginx
Приветствие в браузере
  1. Следующий шаг — убедимся, что включён автозапуск:
systemctl is-enabled nginx

Правильный вывод — «enabled».

Команды Nginx на Ubuntu

Синтаксис базовых команд:

sudo systemctl <command> nginx

Вместо <command> вставьте:

  • start — для запуска,
  • stop — для остановки,
  • restart — чтобы перезапустить,
  • reload — чтобы перезагрузить веб-сервер,
  • status — проверить актуальный статус.

Кроме того используется запрос «nginx -t» для тестирования конфигурации.

Когда Nginx уже запущен, для управления можно обращаться к исполняемому файлу (для чего используют флаг «-s»). Общий синтаксис обращения:

nginx -s <command>

Вместо <command> можно указать одну из команд:

  • stop — быстрое завершение всех процессов;
  • quit — медленное завершение, при котором все текущие запросы будут обслужены;
  • reload — перезагрузить файл конфигурации;
  • reopen — закрыть и открыть файлы логов.

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

На выделенных серверах можно перезапустить и перезагрузить программу через SSH.

  • Перезапуск:
/etc/init.d/nginx stop
/etc/init.d/nginx start
  • Перезагрузка:
/etc/init.d/nginx reload

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

Настройка сетевого экрана

Сетевой экран управляет доступом к портам. В нашем случае нужно закрыть все порты, и оставить открытыми порты, которые обслуживают Secure Shell, Hypertext Transfer Protocol и Hypertext Transfer Protocol Secure. В примере мы покажем, как открыть стандартные порты 22, 80 и 443 (SSH, HTTP и HTTPS соответственно). Однако известно, что на эти порты приходится большинство хакерских атак, поэтому рекомендуется сначала изменить установленные по умолчанию порты сервера, а потом произвести перенастройку сетевого экрана.

  1. Настраивать сетевой экран будем с помощью UFW (Uncomplicated Firewall), инструмента командной строки, предназначенного для управления политикой безопасности файрвола. Обычно утилита установлена по умолчанию, в противном случае установим её (не забудьте перед этим обновить репозиторий):
apt install ufw
  1. Когда установка будет завершена, произведём настройку и добавим Nginx. Задавать правила нужно обязательно с выключенным файрволом, а включать его можно только по окончании настройки. Откроем /etc/ufw/applications.d/nginx.ini для редактирования:
nano /etc/ufw/applications.d/nginx.ini
  1. Пропишем в содержимом:
[Nginx HTTP]
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

4. Для проверки просмотрим текущий список приложений, добавленных в утилиту:

    ufw app list

    Если изменения применились, то в выведенном списке должен быть веб-сервер.

    1. Затем запустим сетевой экран и дадим разрешение использовать перечисленные выше порты:
    ufw enable
    ufw allow 'Nginx Full'
    ufw allow 'OpenSSH'
    1. Убедимся, что изменённые настройки применены:
    ufw status

    В выводе будет информация о текущем состоянии и правилах UFW.

    Базовая настройка

    Параметры конфигурации должны быть правильно настроены. Nginx управляют директивы, прописанные в файле nginx.conf и в файлах папок /etc/nginx/sites-available и /etc/nginx/sites-enabled.

    Файл nginx.conf содержит основные параметры. В sites-available лежат conf-файлы доступных виртуальных хостов, а sites-enabled содержит сведения об активных сайтах.

    Обзор основного конфигурационного файла

    Файл nginx.conf и расположен в папке /usr/local/nginx/conf, /etc/nginx или /usr/local/etc/nginx. Откроем nginx.conf (замените /directory/ на актуальный путь):

    nano /directory/nginx.conf
    Содержание конфигурационного файла nginx

    Как мы уже писали выше, файл разбит на одиночные директивы и блоки. Внутри блоков может храниться более одной директивы с дополнительными инструкциями, объединённые в блок по какому-либо признаку.

    Перечислим некоторые из них:

    • user — пользователь, от чьего имени осуществляется запуск;
    • worker_processes — параметр ограничивает количество процессов, выполняющих обработку запросов; фиксированный параметр не может превышать число ядер CPU; укажите «auto», чтобы установить его автоматически равным количеству ядер CPU;
    • pid — задаёт путь к nginx.pid, где будет храниться номер главного процесса; главный процесс отвечает за чтение и проверку конфигурации и управляет рабочими процессами;
    • include — подключает дополнительные conf-файлы;
    • events — блочные директивы, описывающие характеристики сетевого соединения;
    • worker_connections — параметр ограничивает количество одновременных соединений;
    • multi_accept — мультидоступ; включён по значению «on», и отключён по «off»;
    • use — способ, которым будут обработаны соединения;
    • http — блочные директивы, ответственные за HTTP;
    • tcp_nopush — если присвоено значение «on», то заголовки HTTP будут передаваться одним пакетом;
    • tcp_nodelay — если «on», то отправляемые данные не будут буферизованы;
    • keepalive_timeout — максимальное время ожидания, после которого соединение закрывается;
    • keepalive_requests — ограничивает количество запросов по keep-alive соединению, когда достигнуто указанное количество — соединение закрывается;
    • error_log — лог ошибок; чтобы собрать ошибки в конкретном блоке, добавьте в его директивы «error_log»;
    • gzip — сжатие данных. 

    Как настроить виртуальные хосты

    На веб-сервер можно добавлять множество сайтов, которые будут иметь общий IP-адрес. Чтобы Nginx мог распределить запросы в соответствии с доменами, к которым они относятся, нужны виртуальные хосты.

    Рассмотрим работу Nginx на примере сайта с доменным именем test_adminvps.ru и статическим содержимым.

    1. Сначала создадим корневой каталог:
    mkdir -p /var/www/test_adminvps.ru/html
    1. Создадим файл index.html и откроем его для редактирования:
    nano /var/www/test_adminvps.ru/html/index.html
    1. Внесём в него данные, необходимые для отображения веб-страницы в браузере, укажем тип документа, язык, кодировку, заполним теги:
    <!DOCTYPE html>
    <html lang="ru">
    <head>
    <title>test_adminvps.ru</title>
    <meta charset="utf-8">
    </head>
    <body>
    <h1>Hello</h1>
    </body>
    </html>
    1. Добавим в папку sites-available conf-файл для сайта test_adminvps.ru:
    nano /etc/nginx/sites-available/test_adminvps.ru.conf
    1. Запишем в него:  
    server {
    listen 80;
    listen [::]:80;
    server_name test_adminvps.ru www.test_adminvps.ru;
    root /var/www/test_adminvps.ru/html;
    index index.html index.xml;
    }
    1. После этих действий сайт добавлен в доступные. Осталось добавить его в список активных в папке sites-enabled:
    ln -s /etc/nginx/sites-available/test_adminvps.ru.conf /etc/nginx/sites-enabled/
    1. Виртуальный хост создан, проверим его текущее состояние:
    nginx -t
    1. Затем нужно деактивировать дефолтный виртуальный хост:
    rm /etc/nginx/sites-enabled/default

    Дефолтный хост отключён, теперь Nginx будет использовать первый виртуальный хост из конфигурации. А это означает, что по IP-адресу сервера откроется созданный нами test_adminvps.ru.

    1. Перезагружаем веб-сервер:
    systemctl restart nginx
    1. Перейдём по его адресу — в окне браузера должна отобразиться индексная страница сайта.

    Подведём итоги

    Мы рассмотрели процесс установки Nginx на Ubuntu, а также привели пошаговую инструкцию для первичной настройки веб-сервера. В результате описанных здесь действий сервер уже готов к следующему шагу — подключению SSL-сертификата и настройке переадресации с HTTP на HTTPS. 

    Читайте в блоге:

    Что будем искать? Например,VPS-сервер

    Мы в социальных сетях