Что понадобится
Сервер с Ubuntu 24.04, вход по SSH и пользователь с правом sudo. Если сервера ещё нет, начните с первой настройки VPS, а про вход на сервер читайте в статье подключение к VPS по SSH.
Для домена нужна A-запись, которая указывает на IP-адрес сервера. Её создают в DNS-настройках у регистратора или хостера. Обновление записи занимает от нескольких минут до нескольких часов.
Nginx это веб-сервер: он принимает запросы из браузера и отдаёт файлы сайта или передаёт запрос вашему приложению. Мы ставим версию из репозитория Ubuntu. Она получает исправления безопасности вместе с обычными обновлениями системы.
Установите Nginx
sudo apt update
sudo apt install nginx
Первая команда обновляет список пакетов. Вторая ставит Nginx и сразу запускает его как службу. Подтвердите установку клавишей y.
Проверьте, что он работает
sudo systemctl status nginx
nginx -v
curl -I http://localhost
systemctl status показывает состояние службы, нужна строка active (running). nginx -v печатает установленную версию. curl -I запрашивает у сервера только заголовки: ответ HTTP/1.1 200 OK значит, что Nginx отвечает на запросы.
Автозапуск при загрузке сервера включается вместе с установкой пакета. Проверить его можно командой systemctl is-enabled nginx, ответ enabled.
Если открыть в браузере IP-адрес сервера и страница не грузится, дело в файрволе. Порты открывают ниже.
Где лежат файлы
| Путь | Что там |
|---|---|
/etc/nginx/nginx.conf |
главный конфиг, обычно его не правят |
/etc/nginx/sites-available/ |
конфиги сайтов (черновики и рабочие) |
/etc/nginx/sites-enabled/ |
ссылки на включённые конфиги |
/var/www/html/ |
стартовая страница по умолчанию |
/var/log/nginx/ |
журналы доступа и ошибок |
Схема простая: конфиг сайта пишут в sites-available, а в sites-enabled кладут на него символическую ссылку. Нет ссылки, нет и сайта.
Создайте server block для домена
Server block (блок server) описывает один сайт: на какой домен он отвечает и откуда берёт файлы. Для примера возьмём домен example.ru. Подставьте свой.
Сначала создайте каталог и страницу:
sudo mkdir -p /var/www/example.ru
echo '<h1>example.ru работает</h1>' | sudo tee /var/www/example.ru/index.html
mkdir -p создаёт каталог для файлов сайта. Вторая команда записывает в него простую страницу: tee с sudo нужен, потому что обычная перенаправляющая запись > не получит права root.
Теперь конфиг:
sudo nano /etc/nginx/sites-available/example.ru
Команда открывает редактор nano. Вставьте:
server {
listen 80;
listen [::]:80;
server_name example.ru www.example.ru;
root /var/www/example.ru;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
listen задаёт порт (80 для IPv4 и IPv6). server_name перечисляет домены, на которые отвечает блок. root указывает каталог с файлами. try_files ищет файл по адресу запроса и при неудаче отдаёт ошибку 404.
Включите сайт:
sudo ln -s /etc/nginx/sites-available/example.ru /etc/nginx/sites-enabled/
Команда создаёт ссылку в sites-enabled. Страницу-заглушку Nginx из пакета при этом можно оставить: она отвечает только на запросы, которые не подошли ни под один домен. Если нужно отключить её, удалите ссылку /etc/nginx/sites-enabled/default, сам файл в sites-available останется.
Проверьте конфиг и перечитайте его
sudo nginx -t
sudo systemctl reload nginx
nginx -t проверяет синтаксис всех конфигов и ничего не меняет. При успехе выводит syntax is ok и test is successful. reload просит Nginx прочитать новый конфиг без остановки: открытые соединения не рвутся. Всегда запускайте nginx -t перед reload: с ошибкой в конфиге Nginx не применит изменения, а при полном restart может не запуститься.
Если сайт проксирует запросы к приложению, вместо root и try_files в блок location / пишут proxy_pass http://127.0.0.1:3000;, где 3000 это порт приложения. Приложение при этом слушает только локальный адрес.
Откройте порты 80 и 443
Если вы включили файрвол ufw, разрешите веб-трафик:
sudo ufw allow 'Nginx Full'
sudo ufw status
Профиль Nginx Full приходит вместе с пакетом и открывает сразу порты 80 (HTTP) и 443 (HTTPS). status показывает итоговый список правил. Если ufw выключен, включайте его по статье настройка файрвола ufw: сначала разрешите SSH, иначе потеряете доступ к серверу.
Откройте http://example.ru в браузере. Должна появиться ваша страница. Если не появилась, проверьте A-запись командой dig +short example.ru (пакет dnsutils) или на сайте регистратора.
Сертификат HTTPS
Порт 443 открыт, но без сертификата сайт по HTTPS не заработает. Выпуск бесплатного сертификата описан в статье бесплатный SSL на VPS.
Логи
sudo tail -n 20 /var/log/nginx/access.log
sudo tail -n 20 /var/log/nginx/error.log
tail -n 20 выводит последние 20 строк файла. В access.log лежит по строке на каждый запрос: адрес клиента, адрес страницы, код ответа. В error.log попадают ошибки: неверный путь, отказ в доступе, недоступное приложение. Следить за журналом в реальном времени можно командой sudo tail -f /var/log/nginx/error.log, выход через Ctrl+C. Про общие журналы системы читайте в статье журналы и службы systemd.
Ротация журналов настроена пакетом: старые файлы сжимаются и удаляются автоматически, ничего делать не нужно.
Что делать дальше
Выпустите сертификат по статье про SSL на VPS и настройте резервные копии. Если сервера под сайт ещё нет, сравните тарифы на странице подбора VPS: сейчас в базе 261 тарифов от 140 ₽ в месяц, данные сверены 16 октября 2026 года.
