Главная/Разработка/Nginx

Установка и настройка Nginx на VPS как обратного прокси

Установка Nginx на Ubuntu или Debian занимает одну команду apt, а работа начинается после неё: настроить его как обратный прокси, то есть сервер, который принимает запросы из интернета и передаёт их приложению на локальном порту. Ниже рабочий конфиг для контейнера на 127.0.0.1, подключение HTTPS и разбор ошибок 502, 504 и 413.

5 мин чтенияДанные проверены 16 октября 2026

Ответ за 30 секунд

Nginx берут, когда рядом с прокси нужна раздача статики или PHP, а конфиг уже знаком. Для контейнера достаточно proxy_pass и четырёх заголовков. Заголовок Host Nginx по умолчанию подменяет адресом из proxy_pass, поэтому строку proxy_set_header Host $host; добавляйте всегда.

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

Ошибки Nginx за прокси: 502, 504, 413 и неверный Host

01 · 1 мин

Установка Nginx на Ubuntu и Debian: пакет, служба и файрвол#

  1. Поставьте пакет: sudo apt update && sudo apt install nginx. Служба запускается сама.
  2. Откройте порты командой sudo ufw allow 'Nginx Full': профиль из пакета разрешает 80 и 443.
  3. Проверьте адрес сервера в браузере: должна открыться страница приветствия Nginx.
  4. Уберите заглушку, когда будет свой сайт: sudo rm /etc/nginx/sites-enabled/default.

В Debian и Ubuntu конфиги сайтов хранят в /etc/nginx/sites-available/, а включают символической ссылкой в /etc/nginx/sites-enabled/. Версия в репозитории дистрибутива может отставать, свежие ветки stable и mainline ставят из репозитория nginx.org.

ЗадачаКоманда
Проверить конфигsudo nginx -t
Применить без остановкиsudo systemctl reload nginx
Перезапуститьsudo systemctl restart nginx
Остановить и не поднимать после перезагрузкиsudo systemctl disable --now nginx

Если конфиги не хочется править руками, в маркетплейсе Таймвеб Клауд есть Nginx Proxy Manager (156 установок на 14 октября 2026): веб-интерфейс над Nginx в Docker, где домены и сертификаты Let's Encrypt добавляют кнопками.

02 · 1 мин

Конфиг Nginx для контейнера на localhost: proxy_pass и заголовки#

Контейнер публикуют только на локальном адресе, -p 127.0.0.1:3000:3000, чтобы приложение было доступно через Nginx, а не напрямую. Файл /etc/nginx/conf.d/websocket.conf объявляет переменную для WebSocket, сайт лежит в sites-available:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name app.example.com;
    client_max_body_size 20m;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}
ЗаголовокЗачем
HostПриложение видит домен, который ввёл посетитель, и строит правильные ссылки
X-Real-IP и X-Forwarded-ForЖурнал приложения показывает адрес посетителя, а не 127.0.0.1
X-Forwarded-ProtoПриложение знает, что снаружи был HTTPS, и не зацикливает переадресацию
Upgrade и ConnectionПропускают WebSocket, на которых работают панели и чаты

В документации текущей версии умолчанием у proxy_http_version названа 1.1, в старых сборках было 1.0, поэтому строку оставляют явно. Nginx в самом контейнере читает файлы из /etc/nginx/conf.d/: смонтируйте каталог с конфигами в сервис образа nginx, а в proxy_pass пишите имя сервиса приложения. Перечитать конфиг: docker compose exec nginx nginx -s reload.

03 · 1 мин

HTTPS для Nginx: сертификат от Certbot одной командой#

Когда сайт открывается по HTTP, включите сертификат: sudo certbot --nginx -d app.example.com. Certbot допишет в ваш блок server порт 443, пути к сертификату и переадресацию с HTTP. Установка, продление и ошибки выпуска разобраны на странице установка Certbot.

Если не хочется держать отдельную программу для сертификатов, посмотрите Caddy: там HTTPS включён в сам веб-сервер.

Инструмент · 1 мин

Ошибки Nginx за прокси: 502, 504, 413 и неверный Host#

В браузереПричинаЧто сделать
502 Bad GatewayПриложение не запущено или слушает другой портСверьте порт в proxy_pass с docker ps
504 Gateway Time-outПриложение отвечает дольше 60 секундПоднимите proxy_read_timeout или ускорьте приложение
413 Request Entity Too LargeЗагрузка больше 1 МБЗадайте client_max_body_size
Страница приветствия Nginx вместо сайтаserver_name не совпал с доменом, сработал сервер по умолчаниюПроверьте имя домена и ссылку в sites-enabled
Слишком много переадресацийПриложение не знает, что снаружи HTTPS, и снова отправляет на HTTPSДобавьте X-Forwarded-Proto

Неочевидная ловушка с Host: без своей строки Nginx отправляет приложению заголовок со значением из proxy_pass, то есть 127.0.0.1:3000. Приложение строит ссылки на этот адрес, а почтовые письма и OAuth-переходы ведут в пустоту. Точную причину ищите в журнале, а подсказка ниже сверит строку с готовым действием.

Что сказано в журнале Nginx

Откройте /var/log/nginx/error.log, найдите последнюю ошибку и выберите похожую строку

Строка из error.log

05 · 1 мин

Балансировщик нагрузки Nginx: upstream на два контейнера#

Блок upstream превращает Nginx в простой балансировщик: запросы чередуются между серверами по кругу. Для приложений без общего состояния добавляйте строку least_conn;, чтобы новый запрос шёл на менее занятую копию.

upstream app_pool {
    least_conn;
    server 127.0.0.1:3001 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:3002 max_fails=3 fail_timeout=30s;
}

Затем в location пишут proxy_pass http://app_pool;. В открытой версии Nginx проверка идёт по ходу работы: сервер выпадает из пула после ошибок. Активные проверки состояния входят в коммерческий Nginx Plus. Для проверок раз в секунду, TCP-пулов и страницы статистики лучше подходит HAProxy.

06 · 1 мин

Вопросы об установке Nginx#

Как перезапустить Nginx на сервере, не уронив сайты?

Сначала проверьте конфиг командой nginx -t, затем выполните systemctl reload nginx: рабочие процессы заменятся плавно. Полный restart обрывает текущие соединения и нужен после обновления пакета.

Как остановить Nginx на сервере, чтобы освободить порт 80?

Команда sudo systemctl stop nginx остановит службу, а disable уберёт её из автозапуска. Проверьте, что порт свободен, командой ss -tlnp.

Можно ли запустить два Nginx на одном сервере?

Да. Один слушает 80 и 443 и проксирует запросы, второй, например в Docker, занимает порт 8080 на локальном адресе. Два процесса на одном порту не запустятся.

Как развернуть Nginx на своём сервере с нуля?

Создайте сервер с Ubuntu, поставьте пакет nginx, откройте порты 80 и 443, добавьте блок server с proxy_pass на приложение и выпустите сертификат через Certbot.

Почему этому можно верить

Как мы проверяли

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

Источники цифр на этой странице: VPS и VDS серверы Таймвеб Клауд, timeweb.cloud/services/vds-vps, проверено 14 октября 2026; Маркетплейс приложений Таймвеб Клауд, timeweb.cloud/marketplace, проверено 14 октября 2026; Документация Nginx: модуль ngx_http_proxy_module, nginx.org/en/docs/http/ngx_http_proxy_module.html, проверено 15 октября 2026.

SBРедакция SelfBase · обновлено 16 октября 2026

Запустите свой сервер за пару минут

Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.

  • NVMe-диски и гарантированная доля процессора
  • Root-доступ и любой софт, от Docker до игровых серверов
  • Маркетплейс: 91 приложение в один клик
  • Бесплатный перенос проекта силами специалистов
Ошибки