VPS · Гайд

nginx как reverse proxy: руководство

Обновлено October 11, 2026 5 мин чтения

На этой странице
  1. Что делает reverse proxy
  2. Шаг 1: установите nginx
  3. Шаг 2: создайте блок server для прокси
  4. Заголовки и завершающий слеш
  5. WebSockets
  6. Шаг 3: бесплатный HTTPS с Certbot
  7. Как исправить ошибки 502, 504 и 413
  8. Запуск на VPS от HytHost
  9. FAQ

Обратный прокси (reverse proxy) стоит перед вашими приложениями и передаёт им запросы посетителей. С nginx на входе приложение на Node.js, Docker-контейнер или панель, работающая на каком-нибудь порту, превращается в https://app.example.com — с HTTPS, правильными заголовками и одним местом для управления всем этим.

В этом руководстве мы шаг за шагом настроим nginx как reverse proxy на Ubuntu: блок server, заголовки, WebSockets, бесплатный HTTPS и ошибки, с которыми вы скорее всего столкнётесь.

Что делает reverse proxy

  • Одна публичная точка входа. nginx слушает порты 80 и 443 и передаёт каждый домен или путь нужному приложению, так что сами приложения никогда не смотрят в интернет напрямую.
  • HTTPS в одном месте. nginx занимается сертификатами, а приложения за ним могут работать по обычному HTTP на localhost.
  • Несколько приложений на одном сервере. app.example.com, api.example.com и example.com/blog могут вести к разным сервисам.
  • Дополнительно: сжатие, кеширование, лимиты на загрузку и правила доступа — без изменений в самом приложении.

Шаг 1: установите nginx

sudo apt update
sudo apt install nginx

Откройте http://your-server-ip — должна появиться приветственная страница nginx. Если вы используете ufw, разрешите веб-трафик командой sudo ufw allow 'Nginx Full'.

Убедитесь, что приложение запущено и отвечает на самом сервере, например через curl http://127.0.0.1:3000. Если это не работает, не заработает и nginx.

Запускайте nginx и свои приложения с полным root-доступом: тарифы HytHost KVM VPS от €2.92/мес.

Тарифы VPS

Шаг 2: создайте блок server для прокси

В Ubuntu у каждого сайта есть файл в /etc/nginx/sites-available/, который включается ссылкой в sites-enabled. Создайте /etc/nginx/sites-available/app.example.com:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

Включите его, проверьте конфигурацию и перезагрузите:

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Направьте A-запись домена на ваш сервер, и http://app.example.com начнёт показывать ваше приложение. Всегда запускайте nginx -t перед перезагрузкой: команда находит опечатки до того, как они уронят сайт.

Заголовки и завершающий слеш

  • Host передаёт домен, который запросил посетитель. Без него nginx отправляет адрес из proxy_pass, и приложения, которые строят ссылки по хосту, ломаются.
  • X-Real-IP и X-Forwarded-For передают IP-адрес посетителя. Без них каждый запрос выглядит так, будто пришёл с 127.0.0.1.
  • X-Forwarded-Proto сообщает приложению, использовал ли посетитель HTTPS, чтобы оно не уходило в бесконечные редиректы.

Пакет nginx в Ubuntu уже содержит эти строки в /etc/nginx/proxy_params, поэтому include proxy_params; — удобное сокращение.

Завершающий слеш имеет значение. Для приложения, расположенного по пути:

location /app/ {
    proxy_pass http://127.0.0.1:3000/;
}

Со слешем после порта /app/login приходит в приложение как /login. Без него приложение получает полный путь /app/login.

WebSockets

Чаты, live-панели и многие админ-панели используют WebSockets, которым нужны два дополнительных заголовка. Добавьте этот map один раз внутри блока http, например в новом файле /etc/nginx/conf.d/websocket.conf:

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

Затем в location:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 1h;

nginx закрывает проксируемое соединение, по которому 60 секунд ничего не передаётся; более длинный proxy_read_timeout держит открытыми «тихие» WebSocket-соединения. proxy_http_version 1.1 стал значением по умолчанию только в nginx 1.29.7, а в Ubuntu 24.04 поставляется 1.24, так что оставьте эту строку.

Шаг 3: бесплатный HTTPS с Certbot

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx -d app.example.com

Certbot получает бесплатный сертификат Let's Encrypt, добавляет настройки HTTPS в ваш блок server и может перенаправлять HTTP на HTTPS. Сертификат продлевается автоматически; проверить это можно командой sudo certbot renew --dry-run. Подробнее о сертификатах — в руководстве как получить бесплатный SSL-сертификат.

Как исправить ошибки 502, 504 и 413

ОшибкаОбычная причинаРешение
502 Bad Gatewaynginx не может достучаться до приложения: оно остановлено, упало или слушает другой порт или адресЗапустите приложение, проверьте порт через curl http://127.0.0.1:PORT, загляните в /var/log/nginx/error.log
504 Gateway TimeoutПриложение отвечало дольше 60 секундУскорьте запрос или увеличьте proxy_read_timeout для этого location
413 Request Entity Too LargeЗагружаемый файл больше стандартного лимита nginx в 1 МБУкажите client_max_body_size 50m; в блоке server
Бесконечный редиректПриложение не знает, что посетитель использовал HTTPSПередавайте X-Forwarded-Proto и сообщите приложению, что оно работает за прокси

После каждого изменения: sudo nginx -t, затем sudo systemctl reload nginx.

Запуск на VPS от HytHost

Для reverse proxy нужен сервер, на котором вы управляете портами 80 и 443. Тарифы VPS от HytHost работают на KVM с полным root-доступом, SSD-хранилищем и защитой от DDoS; выберите Ubuntu 24.04 и следуйте шагам выше. Запускаете приложения в контейнерах? Сначала установите Docker по руководству как установить Docker на Ubuntu и привяжите порты контейнеров к 127.0.0.1, чтобы к ним мог обращаться только nginx.

FAQ

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

Reverse proxy передаёт запросы одному или нескольким приложениям за ним. Балансировщик нагрузки — это reverse proxy, который распределяет запросы между несколькими копиями одного и того же приложения. nginx умеет и то и другое: копии перечисляются в блоке upstream.

nginx не может достучаться до приложения за ним. Проверьте, что приложение запущено и слушает адрес и порт из proxy_pass, и посмотрите точную причину в /var/log/nginx/error.log.

Нет, если приложение работает на том же сервере. nginx обслуживает HTTPS для посетителей и общается с приложением по обычному HTTP на 127.0.0.1, а этот трафик никогда не покидает машину.

Дайте каждому приложению свой блок server со своим server_name, например app.example.com и api.example.com, и в каждом укажите proxy_pass на свой порт.

Да. Публикуйте порт каждого контейнера только на 127.0.0.1 и направьте на него proxy_pass. Так контейнеры не будут доступны из публичного интернета, а это важно, потому что опубликованные порты Docker обходят ufw.

Размещайте свои приложения за nginx

Тарифы HytHost KVM VPS с полным root-доступом, SSD-хранилищем и защитой от DDoS — от €2.92/мес.

Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hours

Этот гайд был полезен?