Как установить Nginx на Ubuntu: пошаговая инструкция

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Для установки сервера Nginx понадобится локальная машина либо облачный сервер с установленной операционной системой Ubuntu. Программа доступна в официальных репозиториях Ubuntu по умолчанию. Установить её можно непосредственно из них, используя систему управления пакетами apt.

    1. Для начала нужно обновить списки пакетов из репозиториев:

    2. После окончания процесса обновления пакетов можно установить Nginx на машину:

    3. Дождемся окончания установки, а после добавим программу в автозагрузку:

    sudo systemctl enable nginx
    1. Теперь нужно проверить, что веб-сервер успешно установлен и работает, а также добавлен в автозагрузку. Проверим статус работы веб-сервера:
    sudo service nginx status

    Строка «Active: active (running)...» указывает на успешную работу сервера. Есть и другой способ проверить его работу. Нужно вставить IP-адрес сервера в адресную строку браузера. Если результат будет таким же, как на картинке ниже, то веб-сервер работает успешно.

    1. Теперь проверим его наличие в автозагрузке:
    sudo systemctl is-enabled nginx

    Если в ответ на выполненную команду получаем «enabled», значит веб-сервер добавлен в автозагрузки.

    Для работы с установленным веб-сервером пригодятся базовые команды управления. Они приведены в таблице ниже.

    ФункцияКоманда
    Запускsudo systemctl start nginx
    Отключениеsudo systemctl stop nginx
    Перезапускsudo systemctl restart nginx
    Перезагрузкаsudo systemctl reload nginx
    Проверка состояния службыsudo systemctl status nginx
    Тестирование конфигурацииsudo nginx -t

    Проверка состояния службы

    Тестирование конфигурации

    Установка и настройка брандмауэра позволит закрыть все порты, кроме необходимых нам — 22 (SSH), 80 (HTTP), 443 (HTTPS). Первый протокол необходим для подключения к удаленному серверу. Второй и третий необходим для связи между клиентом и сайтом. Главное их отличие в том, что HTTPS — это зашифрованный HTTP. Шифрование данных происходит благодаря SSL-сертификату.

    После успешной установки добавим веб-сервер в список доступных приложений брандмауэра:

    sudo nano /etc/ufw/applications.d/nginx.ini

    Заполним файл следующим образом:

    [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

    Проверим список доступных приложений:

    Если среди них есть веб-сервер, значит всё сделано верно. Теперь нужно запустить брандмауэр и разрешить передачу трафика по вышеуказанным портам:

    sudo ufw enable sudo ufw allow 'Nginx Full' sudo ufw allow 'OpenSSH'

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

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

    Администрирование веб-сервера представляет из себя изменение и поддержку конфигурационных файлов. Среди них 1 файл конфигурации и 2 каталога. Это nginx.conf, sites-available и sites-enabled соответственно. Все они лежат в директории /etc/nginx.

    Файл nginx.conf — это главный конфигурационный файл. Каталог sites-available содержит файлы конфигураций виртуальных хостов. Каждый отдельный файл хранит информацию об определенном сайте. Это его имя, IP-адрес и другие данные. Каталог sites-enabled, в свою очередь, состоит только из конфигураций активных сайтов. Только из директории sites-enabled читаются файлы конфигурации для виртуальных хостов. Также в ней хранятся ссылки на sites-available. Такая структура позволяет временно отключать сайты без потери их конфигураций.

    Рассмотрим более детально главный файл конфигурации. Для этого откроем его для просмотра, используя редактор:

    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` — сжатие контента.
    • worker_connections — максимальное число одновременно работающих соединений одного рабочего процесса.

    • multi_accept — флаг, который может быть как включен (on), так и выключен (off). Если он включен, то рабочий процесс будет принимать все новые соединения, иначе только одно.

    • use — указывает метод обработки соединений. По умолчанию сервер выбирает наиболее подходящий и эффективный.

    • 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.

    Создадим папку для сайта:

    sudo mkdir -p /var/www/testsite.dev/html

    Установим текущего пользователя в качестве владельца и группы:

    sudo chown -R $USER:$USER /var/www/testsite.dev

    Установим права на директорию:

    sudo chmod -R 755 /var/www/testsite.dev

    Владелец нужен для того, чтобы вы могли управлять файлами сайта без sudo. Права 755 позволяют владельцу выполнять любые действия, а веб-серверу — читать содержимое.

    После добавим индексный файл:

    nano /var/www/testsite.dev/html/index.html

    Заполним его минимальными данными для отображения сайта:

    <!DOCTYPE html> <html lang="ru"> <head> <title>testsite.dev</title> <meta charset="utf-8"> </head> <body> <h1>Hello, user</h1> </body> </html>

    После создадим конфигурационный файл сайта в папке sites-available:

    sudo nano /etc/nginx/sites-available/testsite.dev.conf

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

    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, чтобы добавить его из доступных во включенные:

    sudo ln -s /etc/nginx/sites-available/testsite.dev.conf /etc/nginx/sites-enabled/

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

    Отключим сайт по умолчанию, удалив запись о дефолтном виртуальном хосте:

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

    Стоит уточнить, что после того, как мы отключим сайт по умолчанию, Nginx будет использовать первый встреченный серверный блок в качестве резервного сайта (то есть по IP-адресу сервера будет открываться самый первый сайт из конфигурации Nginx).

    Перезагружаем веб-сервер:

    sudo systemctl restart nginx

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

    Другой вариант — воспользоваться командой curl:


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны