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

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

Блог MAATRIX · 2026-07-07

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

Зачем 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\nsystemctl enable --now nginx
', 'Проверьте, что стартовая страница открывается по IP сервера. Если нет — смотрите firewall: порт 80 должен быть открыт (ufw allow 80/tcp).']

Конфиг reverse proxy

['Создаём сайт в /etc/nginx/sites-available/app.conf:', '
server {\n    listen 80;\n    server_name example.com;\n\n    location / {\n        proxy_pass http://127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection "upgrade";\n    }\n}
', 'Заголовки Upgrade и Connection нужны для WebSocket — без них живые соединения будут рваться.', '
ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/\nnginx -t\nsystemctl reload nginx
']

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

["Бесплатный сертификат Let's Encrypt ставится через certbot, который сам правит конфиг nginx.", '
apt install certbot python3-certbot-nginx -y\ncertbot --nginx -d example.com
', 'Certbot настроит редирект с HTTP на HTTPS и автопродление. Проверить продление: certbot renew --dry-run.']

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

['Включаем сжатие в /etc/nginx/nginx.conf для ускорения отдачи:', '
gzip on;\ngzip_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 для веб-приложения

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

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

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

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

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

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

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