Главная/Разработка/Nginx
Установка и настройка Nginx на VPS как обратного прокси
Установка Nginx на Ubuntu или Debian занимает одну команду apt, а работа начинается после неё: настроить его как обратный прокси, то есть сервер, который принимает запросы из интернета и передаёт их приложению на локальном порту. Ниже рабочий конфиг для контейнера на 127.0.0.1, подключение HTTPS и разбор ошибок 502, 504 и 413.
Ответ за 30 секунд
Nginx берут, когда рядом с прокси нужна раздача статики или PHP, а конфиг уже знаком. Для контейнера достаточно proxy_pass и четырёх заголовков. Заголовок Host Nginx по умолчанию подменяет адресом из proxy_pass, поэтому строку proxy_set_header Host $host; добавляйте всегда.
Почасовая оплата: проверьте конфиг на отдельном сервере и удалите его, когда схема заработает.
Ошибки Nginx за прокси: 502, 504, 413 и неверный Host60 стаймаут ответа приложения
1 МБлимит запроса по умолчанию
4заголовка нужны за прокси
01 · 1 мин
Установка Nginx на Ubuntu и Debian: пакет, служба и файрвол#
- Поставьте пакет:
sudo apt update && sudo apt install nginx. Служба запускается сама. - Откройте порты командой
sudo ufw allow 'Nginx Full': профиль из пакета разрешает 80 и 443. - Проверьте адрес сервера в браузере: должна открыться страница приветствия Nginx.
- Уберите заглушку, когда будет свой сайт:
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, найдите последнюю ошибку и выберите похожую строку
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.
Запустите свой сервер за пару минут
Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.
- NVMe-диски и гарантированная доля процессора
- Root-доступ и любой софт, от Docker до игровых серверов
- Маркетплейс: 91 приложение в один клик
- Бесплатный перенос проекта силами специалистов