MAATRIX / Блог / nginx как reverse proxy: проксируем приложение правильно

nginx как reverse proxy: проксируем приложение правильно

nginx как reverse proxy: полная настройка
Блог MAATRIX · 2026-07-07

Ваше приложение слушает 127.0.0.1:3000, а наружу нужен домен с HTTPS на 443 порту. Задачу решает nginx в роли reverse proxy. Разберём рабочий конфиг, TLS-сертификат и частые ошибки.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Зачем reverse proxy

Приложение (Node, Python, Go) обычно слушает локальный порт. Выставлять его напрямую в интернет небезопасно и неудобно: нет HTTPS, нет балансировки, нет кэша статики.

nginx принимает запросы на 80/443, терминирует TLS и проксирует их на backend. Один сервер может обслуживать десятки приложений на разных доменах.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для веб-приложения

Установка

apt update && apt install nginx -y
systemctl enable --now nginx

Проверьте, что стартовая страница открывается по IP сервера. Если нет — смотрите firewall: порт 80 должен быть открыт (ufw allow 80/tcp).

Конфиг reverse proxy

Создаём сайт в /etc/nginx/sites-available/app.conf:

server {
    listen 80;
    server_name example.com;

    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 "upgrade";
    }
}

Заголовки Upgrade и Connection нужны для WebSocket — без них живые соединения будут рваться.

ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

HTTPS за одну команду

Бесплатный сертификат Let's Encrypt ставится через certbot, который сам правит конфиг nginx.

apt install certbot python3-certbot-nginx -y
certbot --nginx -d example.com

Certbot настроит редирект с HTTP на HTTPS и автопродление. Проверить продление: certbot renew --dry-run.

Gzip и частые ошибки

Включаем сжатие в /etc/nginx/nginx.conf для ускорения отдачи:

gzip on;
gzip_types text/plain text/css application/json application/javascript;
  • 502 Bad Gateway — backend не запущен или слушает не тот порт. Проверьте ss -tlnp | grep 3000.
  • 413 Request Entity Too Large — добавьте client_max_body_size 50m;.
  • Изменения не применились — вы забыли nginx -t и systemctl reload nginx.

На NVMe у MAATRIX nginx отдаёт статику с минимальными задержками, а reload проходит без разрыва активных соединений.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для веб-приложения

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

В чём разница reload и restart?

reload перечитывает конфиг без разрыва соединений, restart полностью перезапускает процесс. В проде почти всегда нужен reload.

Как проксировать несколько приложений?

Создайте отдельный server-блок на каждый домен со своим proxy_pass. nginx маршрутизирует по server_name.

Certbot выдал ошибку — что делать?

Чаще всего домен ещё не указывает на сервер (A-запись не прописана) или порт 80 закрыт firewall. Проверьте оба условия.