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

Урок входит в серию о запуске 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.
Если служба не запустилась, сначала посмотрите причину:
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 последовательность такая:
- Откройте «Домены и SSL» и выберите
hostfera.ru. - Перейдите на вкладку «Поддомены» и нажмите «Добавить».
- Введите
lab: основное имя домена панель добавит сама. - Выберите «Ввести IP-адрес» и укажите адрес VPS.
- Сохраните поддомен и проверьте итоговую привязку.
Ручной ввод подходит и для сервера, который не отображается в списке услуг этого аккаунта. Для нашей практической части используется уже работающий VPS, поэтому мы указываем его адрес самостоятельно.
Редактировать запись нужно там, где обслуживаются 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. Иллюстрация показывает конечный результат после обоих уроков.
Установка 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.
Как понять, что первый сайт готов
Проверьте результат по цепочке:
- Служба Nginx активна,
nginx -tпроходит без ошибок. - Включён собственный виртуальный хост с правильными
server_nameиroot. - Запрос с нужным именем возвращает вашу страницу, а не шаблонный сайт.
- Домен указывает на нужный VPS, веб-порты доступны посетителю.
- После настройки сертификата HTTPS проходит проверку без отключения проверки TLS.
- Файлы сайта и конфигурация включены в план резервного копирования.
Для последнего пункта пригодится руководство по ежедневным резервным копиям. Копию нужно не только создать, но и проверить восстановлением на отдельном тестовом пути.
При размещении сайта проверьте правила UFW для SSH, HTTP и HTTPS: порт 80 нужен и для HTTP-01 при выпуске и продлении сертификата.
Перед объявлением запуска пройдите проверку сайта без входа администратора. Для появления материалов в поиске отдельно проверьте robots.txt и sitemap.xml.
Проксирование приложения и ошибка 502
После установки Nginx можно подключить Node.js или FastAPI. Если upstream недоступен, используйте порядок диагностики 502.
Ограничение загрузки и ошибка 413
Если большие файлы не загружаются, проверьте client_max_body_size и источник ответа 413. В инструкции есть реальный пример до и после изменения лимита для одного маршрута.
Первоисточники
Сообщите адрес статьи и фрагмент через контакты редакции.

