Налаштування Nginx як зворотного проксі для бекенд-застосунків | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Налаштування Nginx як зворотного проксі для бекенд-застосунків

Вступ

У сучасних серверних середовищах застосунки рідко взаємодіють із інтернетом напряму. Замість цього перед ними розміщується зворотний проксі (reverse proxy), який обробляє всі вхідні запити клієнтів. Nginx — один із найпопулярніших інструментів для цього завдання, оскільки він швидкий, надійний і простий у налаштуванні. У цьому посібнику ви дізнаєтесь, як налаштувати Nginx як зворотний проксі для бекенд-застосунку, що працює на тому ж сервері.

Що таке зворотний проксі?

Зворотний проксі — це сервер, який:

  • Приймає запити від клієнтів (браузерів, API тощо)
  • Передає ці запити бекенд-застосунку
  • Повертає відповідь бекенду назад клієнту

Клієнт ніколи не взаємодіє безпосередньо з бекенд-застосунком.

Зворотний проксі vs прямий доступ

Без зворотного проксі:

Client ---> Backend application (port 3000)

Із зворотним проксі:

Client ---> Nginx (port 80, 443) ---> Backend application (port 3000)

Чому варто використовувати Nginx як зворотний проксі?

Використання Nginx перед вашим застосунком дозволяє:

  • Відкривати в інтернет лише порти 80/443
  • Приховати бекенд-служби від прямого доступу
  • Завершувати HTTPS (TLS) в одному місці
  • Додавати логування, контроль доступу та обмеження швидкості
  • Запускати кілька застосунків на одному сервері

Для системних адміністраторів це означає кращу безпеку та простіше адміністрування.

Сценарій, який використовується в цьому посібнику

Для простоти ми використаємо таку конфігурацію:

  • Nginx слухає порт 80
  • Бекенд-застосунок слухає 127.0.0.1:3000
  • Запити до http://example.com перенаправляються на бекенд

Схема руху трафіку

[ Browser ] | v [ Nginx example.com:80,443 ] | v [ Backend app 127.0.0.1:3000 ]

Передумови

Перед початком переконайтесь, що у вас є:

  • Linux-сервер із останньою стабільною версією Debian
  • Root або sudo-доступ
  • Уже запущений бекенд-застосунок (наприклад, Node.js, Python або Java)
  • Базові навички роботи з Linux-терміналом

Встановлення Nginx

Оновіть список пакетів і встановіть Nginx та curl (для тестування):

sudo apt update

sudo apt install nginx curl

Перевірте, що Nginx запущений:

systemctl status nginx

У виводі ви повинні побачити "active (running)".

Перевірте Nginx локально:

curl http://localhost

Якщо все працює, ви отримаєте стандартну сторінку привітання Nginx.

Структура конфігурації Nginx

Файли конфігурації Nginx зазвичай знаходяться в /etc/nginx/. Важливі каталоги:

  • /etc/nginx/nginx.conf — головний конфігураційний файл
  • /etc/nginx/sites-available/ — конфігурації сайтів (неактивні)
  • /etc/nginx/sites-enabled/ — увімкнені конфігурації (символічні посилання)

Nginx читає конфігурації з каталогу sites-enabled, а не напряму з sites-available. Рекомендується створювати файли в sites-available, а потім створювати символічні посилання в sites-enabled.

Створення конфігурації зворотного проксі

Створіть новий файл сайту

sudo nano /etc/nginx/sites-available/reverse-proxy.conf

Додайте конфігурацію зворотного проксі

server { listen 80; server_name 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; } }

Пояснення конфігурації

Блок server

server { listen 80; server_name example.com; }

  • listen 80; — Nginx слухає HTTP-трафік на порту 80
  • server_name example.com; — доменне ім'я, на яке реагує цей блок

Блок location

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

  • location / — відповідає всім URL
  • proxy_pass — пересилає запити до бекенд-застосунку

Проксі-заголовки

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;

Ці заголовки дозволяють бекенду знати:

  • Оригінальне доменне ім'я
  • Реальну IP-адресу клієнта
  • Чи був запит HTTP або HTTPS

Без цих заголовків застосунок може логувати некоректну інформацію.

Активація конфігурації

Вимкніть сайт Nginx за замовчуванням, щоб уникнути конфліктів на порту 80:

sudo rm /etc/nginx/sites-enabled/default

Створіть символічне посилання для активації сайту:

sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/

Перевірте конфігурацію на синтаксичні помилки:

sudo nginx -t

Якщо помилок немає, перезавантажте Nginx:

sudo systemctl reload nginx

Тестування зворотного проксі

На сервері:

curl http://example.com

Відкрийте http://example.com у браузері. Ви повинні отримати відповідь від вашого бекенд-застосунку, а не стандартну сторінку Nginx. Якщо все налаштовано правильно, бекенд-застосунок завантажиться.

Як обробляється запит

  1. Клієнт надсилає запит до example.com
  2. Nginx приймає запит на порт 80
  3. Nginx пересилає запит на 127.0.0.1:3000
  4. Бекенд обробляє запит
  5. Відповідь повертається через Nginx
  6. Клієнт отримує відповідь

Типові помилки та усунення проблем

Бекенд не запущений

  • Переконайтесь, що застосунок працює
  • Перевірте правильність порту

ss -tuln | grep 3000

Неправильний proxy_pass

  • Обов'язково вказуйте http://
  • Перевірте IP-адресу та порт

Забули перезавантажити Nginx

Після кожної зміни:

sudo systemctl reload nginx

Брандмауер блокує доступ

Відкрийте порт 80:

sudo ufw allow 80

Додаткові покращення

Після налаштування зворотного проксі можна:

  • Увімкнути HTTPS за допомогою Let's Encrypt
  • Запустити кілька бекенд-застосунків
  • Додати access- та error-логи
  • Налаштувати балансування навантаження
  • Додати підтримку WebSocket

Налаштування HTTPS

У продакшн-середовищі завжди слід використовувати HTTPS замість HTTP. HTTPS шифрує трафік між клієнтом і сервером, захищаючи паролі, API-токени, cookie та інші конфіденційні дані. Nginx підтримує HTTPS за допомогою SSL/TLS-сертифікатів. У цьому розділі ви дізнаєтесь:

  • Що таке Certbot
  • Як встановити Certbot
  • Як Certbot автоматично змінює конфігурацію Nginx
  • Як вручну налаштувати Nginx із придбаним сертифікатом

Що таке Certbot?

Certbot — це інструмент, який автоматично отримує та встановлює безкоштовні SSL/TLS-сертифікати від Let's Encrypt. Він може:

  • Запросити безкоштовний сертифікат
  • Підтвердити володіння доменом
  • Автоматично налаштувати Nginx
  • Налаштувати автоматичне оновлення сертифікатів

Для початківців і більшості продакшн-середовищ Certbot — найпростіший і найбезпечніший спосіб увімкнути HTTPS.

Встановлення Certbot

Оновіть пакети:

sudo apt update

Встановіть Certbot і плагін для Nginx:

sudo apt install certbot python3-certbot-nginx

Пакет python3-certbot-nginx дозволяє Certbot автоматично змінювати конфігурацію Nginx.

Отримання та встановлення сертифіката

Перед запуском Certbot переконайтесь, що:

  • Домен вказує на публічну IP-адресу сервера
  • Nginx запущений
  • Порти 80 і 443 відкриті у брандмауері

Запустіть:

sudo certbot --nginx

Certbot:

  1. Запитає, який домен потрібно захистити
  2. Підтвердить володіння доменом
  3. Автоматично змінить конфігурацію Nginx
  4. Перезавантажить Nginx

Info

Certbot автоматично змінює конфігурацію Nginx. Він зазвичай додає новий серверний блок для порту 443 (HTTPS), додає шляхи до SSL-сертифікатів, налаштовує перенаправлення HTTP на HTTPS (якщо ви це оберете), та додає рекомендовані SSL-налаштування.

Приклад конфігурації, доданий Certbot:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 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; } }

Certbot також може змінювати блок HTTP для перенаправлення трафіку:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

Оскільки Certbot автоматично редагує файли конфігурації, рекомендується:

  • Зберігати резервні копії вашої конфігурації
  • Розуміти, які зміни були внесені
  • Завжди тестувати конфігурацію після змін

Перевірте конфігурацію:

sudo nginx -t

Автоматичне оновлення сертифікатів

Сертифікати Let's Encrypt дійсні 90 днів. Certbot автоматично налаштовує таймер оновлення. Перевірку можна виконати за допомогою:

sudo certbot renew --dry-run

Якщо все налаштовано правильно, оновлення відбуватиметься автоматично без простоїв.

Використання придбаного SSL-сертифіката

Якщо ви купуєте SSL-сертифікат у центрі сертифікації (CA), ви повинні налаштувати Nginx вручну. Після купівлі ви зазвичай отримуєте:

  • Файл сертифіката (наприклад, example.com.crt)
  • Приватний ключ (example.com.key)
  • CA bundle (ca_bundle.crt)

Створіть захищений каталог:

sudo mkdir -p /etc/nginx/ssl

sudo chmod 700 /etc/nginx/ssl

Скопіюйте файли сертифікатів у цей каталог.

Приклад конфігурації HTTPS із придбаним сертифікатом:

server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; 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; } }

Додайте HTTP - HTTPS редірект:

server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

Після змін перезавантажте Nginx:

sudo nginx -t

sudo systemctl reload nginx

Tip

Для початківців системних адміністраторів рекомендується використовувати Certbot, якщо немає вимоги щодо комерційних сертифікатів.

Підсумок

У цьому посібнику ви дізналися:

  • Що таке зворотний проксі
  • Як Nginx пересилає запити бекенд-застосункам
  • Як створити й увімкнути конфігурацію
  • Як тестувати та усувати помилки
  • Як налаштувати HTTPS

Налаштування Nginx як зворотного проксі — базова навичка системного адміністратора, яка широко використовується в продакшн-середовищах.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA