VPS · Гайд

nginx як reverse proxy: посібник

Оновлено October 11, 2026 4 хв читання

На цій сторінці
  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

Цей гайд був корисним?