Linux

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

Установка Nginx на Ubuntu 24.04, каталог первого сайта, server block, подключение поддомена и проверка перед HTTPS. Команды и результаты проверены на учебном VPS.

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

Урок входит в серию о запуске VPS в Timeweb Cloud. Перед установкой веб-сервера подготовьте SSH-доступ и правила firewall.

Nginx позволяет разместить сайт на своём VPS и управлять тем, какой каталог открывается по доменному имени. В этой инструкции установим веб-сервер на Ubuntu 24.04, создадим отдельный сайт, подключим поддомен и проверим результат. Следующим шагом будет HTTPS.

Для практической части используем уже работающий VPS с Ubuntu 24.04 LTS — это позволяет сократить расходы на подготовку уроков. На стенде 2 vCPU, около 2 ГБ RAM и диск 30 ГБ. Доменом hostfera.ru управляем через Timeweb Cloud, а учебный сайт открывается по адресу lab.hostfera.ru.

Команды ниже выполняются в терминале на сервере, если явно не указано другое. Для установки нужны права root или пользователь с рабочим sudo. Если вы ещё не вошли на VPS, начните с подключения к Linux по SSH.

Что подготовить перед установкой

Проверьте, что у вас есть:

  • VPS с Ubuntu 24.04 и доступом к репозиториям пакетов.
  • Рабочее SSH-подключение и возможность восстановить доступ через консоль провайдера.
  • Имя сайта, которым вы управляете, если он должен открываться по домену.
  • Доступ к DNS-записям этого имени.
  • Свободный TCP-порт 80 для HTTP; для следующего шага потребуется также 443 для HTTPS.

В примере используются lab.hostfera.ru и адрес 185.72.146.26. Подставьте свои значения в команды и конфигурацию. Имя файла hostfera-lab.conf и каталог /srv/hostfera-lab/web/public/ относятся к одному учебному проекту: для своего сайта можно выбрать другие согласованные имена.

На сервере с работающими приложениями сначала выясните, кто уже слушает веб-порты:

sudo ss -lntp '( sport = :80 or sport = :443 )'

Если там уже есть Nginx, Apache, контейнер или другой сервис, не останавливайте его наугад. Потребуется добавить сайт в существующую схему. Здесь разбирается отдельный учебный VPS; переустановка ОС и удаление чужих сайтов для установки Nginx не нужны.

Шаг 1. Устанавливаем Nginx из репозитория Ubuntu

Обновите сведения о доступных пакетах и установите веб-сервер:

sudo apt update
sudo apt install nginx

В этом уроке используется пакет Ubuntu. Если на сервере уже подключён другой репозиторий Nginx, проверьте источник через apt-cache policy nginx, прежде чем смешивать варианты установки.

Проверьте версию и состояние службы:

nginx -v
systemctl is-active nginx
sudo nginx -t

На нашем VPS установлен Nginx 1.24.0 из Ubuntu, служба отвечает active, проверка конфигурации завершается успешно. Номер пакета включает исправления дистрибутива и не обязан совпадать с номером самого нового выпуска на nginx.org.

Проверка версии Nginx, состояния службы, nginx -t и пакетов Ubuntu
Установленные версии, работа службы и проверка конфигурации.

Если служба не запустилась, сначала посмотрите причину:

sudo systemctl status nginx --no-pager
sudo journalctl -u nginx -n 50 --no-pager

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

Шаг 2. Создаём отдельный каталог сайта

Чтобы не смешивать учебные файлы с шаблонным сайтом пакета, создадим собственный каталог:

sudo install -d -m 755 /srv/hostfera-lab/web/public/.well-known/acme-challenge

public станет корнем сайта. Подкаталог .well-known/acme-challenge пригодится для проверки домена при получении сертификата. Секреты приложения, резервные копии и приватные ключи в публичный каталог не кладут.

Создайте страницу:

sudo tee /srv/hostfera-lab/web/public/index.html > /dev/null <<'HTML'
<!doctype html>
<html lang="ru">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="robots" content="noindex,nofollow">
<title>Hostfera Lab — Nginx работает</title>
<style>body{margin:0;background:#071320;color:#edf7ff;font:18px/1.6 system-ui,sans-serif;display:grid;min-height:100vh;place-items:center}main{max-width:720px;margin:24px;padding:40px;border:1px solid #22516d;border-radius:18px;background:#0b1d2c}small{color:#4ed6ff;letter-spacing:.18em}h1{line-height:1.2;font-size:clamp(30px,5vw,48px)}p{color:#b5cbdc}code{color:#74deff}</style>
<main>
<small>HOSTFERA LAB</small>
<h1>Nginx работает</h1>
<p>Учебный сайт на Ubuntu 24.04 LTS.</p>
<p>Домен: <code>lab.hostfera.ru</code>
</p>
<p>Этот стенд используем для проверки команд и подготовки практических уроков.</p>
</main>
</html>
HTML

Это обычный статический HTML: для него не нужны PHP, база данных и Node.js. Позже содержимое файла можно заменить своим сайтом, сохранив связь между каталогом и виртуальным хостом.

Файл должен читаться веб-сервером:

sudo chmod 644 /srv/hostfera-lab/web/public/index.html

Права 755 для каталогов и 644 для этого статического файла достаточны в описанном примере. Выдавать всему сайту 777 для исправления ошибки доступа не нужно.

Шаг 3. Добавляем server block для домена

В конфигурации пакета Ubuntu отдельные сайты удобно хранить в sites-available, а включать ссылкой из sites-enabled.

Убедитесь, что выбранное имя конфигурации ещё не занято вашим рабочим сайтом. Затем создайте файл:

sudo tee /etc/nginx/sites-available/hostfera-lab.conf > /dev/null <<'NGINX'
server {
    listen 80;
    listen [::]:80;
    server_name lab.hostfera.ru;

    root /srv/hostfera-lab/web/public;
    index index.html;
    charset utf-8;
    server_tokens off;

    access_log /var/log/nginx/hostfera-lab.access.log;
    error_log /var/log/nginx/hostfera-lab.error.log warn;

    add_header X-Robots-Tag "noindex, nofollow, noarchive" always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-Frame-Options DENY always;
    add_header Referrer-Policy no-referrer always;

    location ^~ /.well-known/acme-challenge/ {
        try_files $uri =404;
    }

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ /\. {
        deny all;
    }
}
NGINX

Основные строки связывают запрос с файлами:

Директива Что она задаёт
listen 80 Приём HTTP на порту 80
server_name Имя, для которого предназначен этот сайт
root Каталог, из которого отдаются файлы
index index.html Индексный файл для каталога
try_files Проверку существования файла или каталога и ответ 404, если их нет

Отдельное правило блокирует скрытые пути, например /.git/config. При этом ^~ у /.well-known/acme-challenge/ сохраняет доступ к проверочным файлам сертификата. Без правильного приоритета общее правило запрета скрытых файлов может помешать HTTP-проверке домена.

Заголовок X-Robots-Tag в примере запрещает индексацию учебного стенда. Для публичного сайта, который вы готовите к поиску, этот запрет потребуется осознанно снять вместе с соответствующими правилами robots.txt. На работоспособность HTTP сам запрет индексации не влияет.

Включите новый сайт, если такой ссылки ещё нет:

sudo ln -s /etc/nginx/sites-available/hostfera-lab.conf /etc/nginx/sites-enabled/hostfera-lab.conf

Если ln сообщает, что файл существует, проверьте ls -l /etc/nginx/sites-enabled/hostfera-lab.conf. Повторное создание той же ссылки не требуется. Шаблонный сайт пакета можно сохранить: точное имя в server_name позволяет выбрать наш виртуальный хост при обращении к нужному домену.

Шаг 4. Проверяем и применяем конфигурацию

Сначала выполните:

sudo nginx -t

Если проверка успешна, примените настройки:

sudo systemctl reload nginx

Проверьте сайт с правильным заголовком Host:

curl -sS -H 'Host: lab.hostfera.ru' http://127.0.0.1/

В ответ должен прийти HTML вашей страницы с текстом Nginx работает. Обычный запрос к http://127.0.0.1/ без нужного имени может выбрать шаблонный сайт. Поэтому одного кода 200 недостаточно: проверьте и содержимое.

Reload меняет рабочие процессы без обычной остановки службы. Сразу после команды проверяйте ожидаемый результат; успешная проверка синтаксиса ещё не доказывает, что посетитель попадает в нужный виртуальный хост.

Если установлен UFW или внешний firewall провайдера, HTTP должен быть разрешён в используемой политике. До изменения firewall убедитесь, что правило SSH сохраняется и у вас остаётся рабочее подключение. Включать новый сетевой экран вслепую только ради запуска Nginx не требуется.

Шаг 5. Направляем домен или поддомен на VPS

Для имени lab.hostfera.ru нужна A-запись с IPv4 учебного сервера. В нашем примере значение — 185.72.146.26.

В Timeweb Cloud последовательность такая:

  1. Откройте «Домены и SSL» и выберите hostfera.ru.
  2. Перейдите на вкладку «Поддомены» и нажмите «Добавить».
  3. Введите lab: основное имя домена панель добавит сама.
  4. Выберите «Ввести IP-адрес» и укажите адрес VPS.
  5. Сохраните поддомен и проверьте итоговую привязку.
Форма поддомена с выбранным ручным вводом IP-адреса
Для сервера вне списка услуг выберите «Ввести IP-адрес».

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

В панели показан lab.hostfera.ru с привязкой к 185.72.146.26
Поддомен lab.hostfera.ru привязан к IP 185.72.146.26.

Редактировать запись нужно там, где обслуживаются DNS-записи домена. Для другого регистратора или DNS-провайдера интерфейс будет отличаться, но смысл A-записи тот же. Общая схема разобрана в материале о привязке домена к хостингу.

Если у имени есть AAAA-запись, проверьте и её: браузеры могут обращаться по IPv6. Она должна вести на корректно обслуживающий этот сайт сервер. Создавать AAAA из IPv4 нельзя.

Шаг 6. Проверяем DNS и доступ снаружи

На Linux можно посмотреть адреса, которые сейчас возвращает системный резолвер:

getent ahostsv4 lab.hostfera.ru

После обновления в нашем случае появился 185.72.146.26. Это проверка из конкретного окружения: кеши у других резолверов могут обновиться в другое время.

Чтобы проверить HTTP-сайт до обновления DNS, выполните на своём компьютере:

curl --resolve lab.hostfera.ru:80:185.72.146.26 http://lab.hostfera.ru/

В PowerShell используйте curl.exe, если команда curl в вашей среде означает другую программу. Опция --resolve действует только для этого запроса: файл hosts и публичные DNS она не меняет.

На этом этапе, до настройки редиректа на HTTPS, ожидается ваша HTTP-страница. Если сайт уже переведён на HTTPS по следующему уроку, HTTP будет возвращать перенаправление — это другая, более поздняя стадия настройки.

Дополнительные способы проверки описаны в руководстве «Как проверить сайт перед переключением DNS».

Шаг 7. Подключаем HTTPS

Когда имя стабильно указывает на ваш VPS и HTTP доступен извне, переходите к получению сертификата и настройке HTTPS в Nginx. Там показаны webroot, HTTP-01, полный TLS-блок, перенаправление и проверенное автопродление.

На нашем стенде этот шаг уже выполнен: https://lab.hostfera.ru/ отдаёт страницу с кодом 200, а HTTP перенаправляет на HTTPS. Иллюстрация показывает конечный результат после обоих уроков.

Учебный сайт lab.hostfera.ru с сообщением Nginx работает на Ubuntu 24.04 LTS
Готовая учебная страница после подключения Nginx, домена и HTTPS.

Установка Nginx сама по себе не выполняет PHP-код и не запускает Django или Node.js. Для таких приложений потребуется соответствующий обработчик или reverse proxy. Этот урок заканчивается работающим статическим сайтом и готовой основой для следующего шага.

Типичные проблемы при запуске сайта

Симптом Что проверить
Вместо сайта открывается Welcome to nginx Имя запроса, server_name, включение нужного файла и результат reload
Локальная проверка проходит, с компьютера сайт недоступен DNS, внешний и серверный firewall, доступность порта 80
Ответ 403 Права каталогов и файла, наличие индексной страницы, правила location
Ответ 404 Значение root, имя запрашиваемого файла и выбранный виртуальный хост
nginx -t завершается ошибкой Указанные в сообщении файл и строку, синтаксис, повторяющиеся настройки
Nginx не запускается из-за занятого порта Какая служба уже использует 80 или 443; не завершайте неизвестный процесс наугад

Для нашего виртуального хоста журналы вынесены отдельно:

sudo tail -n 50 /var/log/nginx/hostfera-lab.error.log
sudo tail -n 50 /var/log/nginx/hostfera-lab.access.log

При ошибке доступа удобно проверить весь путь:

namei -l /srv/hostfera-lab/web/public/index.html

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

Примеры чтения журналов есть в статье «Как посмотреть логи ошибок сайта». Для динамического приложения отдельно проверяются его собственный процесс и журналы, а не только Nginx.

Как понять, что первый сайт готов

Проверьте результат по цепочке:

  1. Служба Nginx активна, nginx -t проходит без ошибок.
  2. Включён собственный виртуальный хост с правильными server_name и root.
  3. Запрос с нужным именем возвращает вашу страницу, а не шаблонный сайт.
  4. Домен указывает на нужный VPS, веб-порты доступны посетителю.
  5. После настройки сертификата HTTPS проходит проверку без отключения проверки TLS.
  6. Файлы сайта и конфигурация включены в план резервного копирования.

Для последнего пункта пригодится руководство по ежедневным резервным копиям. Копию нужно не только создать, но и проверить восстановлением на отдельном тестовом пути.

При размещении сайта проверьте правила UFW для SSH, HTTP и HTTPS: порт 80 нужен и для HTTP-01 при выпуске и продлении сертификата.

Перед объявлением запуска пройдите проверку сайта без входа администратора. Для появления материалов в поиске отдельно проверьте robots.txt и sitemap.xml.

Проксирование приложения и ошибка 502

После установки Nginx можно подключить Node.js или FastAPI. Если upstream недоступен, используйте порядок диагностики 502.

Ограничение загрузки и ошибка 413

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

Первоисточники

Нашли неточность?

Сообщите адрес статьи и фрагмент через контакты редакции.