Що таке reverse proxy?
Стаття також доступна російською (перейти до перегляду).
Reverse proxy (від англ. reverse – зворотний) – це сервер, який стоїть між користувачами Інтернету та сайтом і приймає всі запити на себе, перш ніж передати їх на реальний сервер із даними.
Коли ви заходите на сайт, ваш запит спочатку потрапляє не напряму до вебсервера сайту, а до посередника – реверс-проксі. Він вирішує, куди та як передати цей запит далі, отримує відповідь від застосунків і повертає її вам. При цьому ви навіть не здогадуєтеся, що між вами й сайтом є ще один додатковий шар.
Аналогією до того, що таке reverse proxy, є робота рецепції в офісі великої компанії. Замість того, щоб безпосередньо відвідувати відділ, клієнти звертаються до адміністратора, який спрямовує їх у потрібному напрямку.
Як працює Reverse Proxy?
Уявімо, що користувач вводить у браузері адресу example.com. Запит надходить на сервер, який працює як Reverse Proxy. Він приймає запит від користувача та передає його внутрішньому вебсерверу або застосунку, який має його обробити.
Схематично це виглядає так:

Користувач → Reverse Proxy → вебсервер або застосунок
Наприклад, Reverse Proxy може передавати всі запити до одного вебсервера. А у складнішій системі він може направляти різні запити до різних сервісів:
-
example.com → вебзастосунок сайту;
-
api.example.com → сервер API;
-
panel.example.com → панель керування.
Для користувача внутрішня структура залишається непомітною — він звертається лише до звичайної адреси сайту.
Після обробки запиту вебсервер або застосунок повертає відповідь Reverse Proxy, а той передає її користувачу.
Навіщо потрібен reverse proxy?
Для клієнта все виглядає так, ніби він спілкується із сайтом безпосередньо. Але за одним доменом може ховатися кілька різних серверів, і це головна перевага такого підходу: справжніх «робочих конячок» не видно на загал. Яку роль це відіграє в архітектурі?

Приховування внутрішніх серверів
Коли користувач звертається до сайту, він взаємодіє виключно з reverse proxy. Так захищається все:
-
реальні адреси;
-
кількість внутрішніх серверів та їх структура;
-
дані про технології, на яких побудовані вебсервери.
Це підвищує рівень безпеки – зловмисник, який намагається атакувати сайт, бачить перед собою лише проксі, а не справжню інфраструктуру.
Маршрутизація запитів
Є однією з головних функцій reverse proxy-сервера. Адміністрування та переспрямування дозволяють розробникам незалежно розвивати сайт і API. З маршрутизацією запитів можна легко впроваджувати нові функції та не турбуватися про те, що зміни в одному застосунку вплинуть на роботу іншого.
Так, кожна команда оновлює свою частину системи у власному темпі, не чекаючи узгодження з рештою. Для клієнтів зміни не будуть помітні, адже з погляду дизайну все залишається єдиним доменом.
HTTPS
Сервер-посередник часто бере на себе обробку HTTPS-з’єднань, приймаючи зашифрований трафік від користувача та працюючи з SSL/TLS-сертифікатом. Внутрішній застосунок при цьому може взагалі не займатися шифруванням і працювати за простішим протоколом – цю частину роботи бере на себе зворотний проксі.
Кешування
Якщо певний контент запитують дуже часто, reverse proxy-сервер може зберігати його копію та віддавати користувачам напряму, без звертання до основного застосунку заново. Кешування знижує навантаження на внутрішні сервери й пришвидшує відповідь для користувача, адже дані вже збережені в кеші й не потребують повторної генерації.
Балансування навантаження (load balancing)
Це особливий випадок маршрутизації запитів, коли реверс-проксі має розподіляти їх так, щоб жоден вебсервер не перевантажувався, доки інші простоюють. Балансування навантаження не є обов’язковою частиною логіки технології, а налаштовується за потреби.
Простий практичний приклад
На практиці часто трапляється така ситуація – на сервері запущено три різні вебзастосунки, кожен з яких працює на власному порту:
-
сайт на PHP – 8000;
-
API – 8080;
-
панель керування – 3000.
Без зворотного проксі довелося б щоразу вказувати не лише домен, а й конкретний порт, наприклад, example.com:8000 для сайту. Це незручно, бо змушує користувача тримати в голові непотрібні йому технічні деталі та ще й показує частину інфраструктури стороннім. Наявність додаткового шару повністю розв’язує цю проблему.
Чим reverse proxy відрізняється від звичайного proxy?
Попри схожість понять, проксі-сервер та зворотний проксі виконують різні функції. Звичайний проксі-сервер стає посередником між користувачем та Інтернетом, «ховаючи» реальну адресу клієнта за своєю.

А от reverse proxy працює навпаки – на боці сервера. Він стоїть перед цілою групою серверів і приймає на себе всі вхідні запити від користувачів, перш ніж передати їх далі. Виходить, що він маскує сервери вже від клієнта.
Які програми можуть працювати як reverse proxy?
Реалізувати функції зворотного проксі можна за допомогою різних інструментів – від класичних вебсерверів до спеціалізованих рішень. Найпоширеніші з них:
-
NGINX – дає високу продуктивність та невелике споживання ресурсів навіть під великим навантаженням;
-
Apache – менш продуктивний за NGINX під час роботи з великою кількістю одночасних з’єднань, але популярний завдяки гнучкості налаштувань і великій кількості готових рішень;

-
HAProxy – вузькоспеціалізований інструмент, створений спеціально для балансування навантаження та проксіювання трафіку;
-
Caddy – має просте налаштування та автоматичне отримання і оновлення SSL/TLS-сертифікатів;
-
Traefik – створений з розрахунком на сучасні динамічні інфраструктури, зокрема контейнери та Docker/Kubernetes.
Проте функції перенаправлення запитів користувачів можуть брати на себе й інші вебзастосунки, наприклад, CDN (Content Delivery Network) – мережа доставки контенту або WAF (Web Application Firewall) – фаєрвол.
Reverse proxy та load balancer – це одне й те саме?
Reverse proxy та load balancer часто плутають, тому варто зрозуміти, що перше поняття значно ширше. Зворотний proxy може просто приймати всі запити та передавати їх одному-єдиному серверу, не займаючись жодним розподілом.

А от вже коли він розподіляє запити між кількома серверами, він фактично виконує ще й функцію load balancer (балансувальника навантаження). Тобто, load balancer – це одна із ролей, яку може виконувати сервер-посередник.
Висновок
Reverse proxy виступає своєрідним «щитом» між користувачами та реальними серверами, беручи на себе весь вхідний трафік і вирішуючи, куди і як його спрямувати. Завдяки цьому вдається:
-
приховати внутрішню структуру системи від сторонніх;
-
гнучко маршрутизувати запити між різними застосунками;
-
зняти з внутрішніх серверів навантаження, перебравши на себе обробку HTTPS і кешування.
За потреби він може й розподілити запити між кількома серверами, взявши на себе роль балансувальника навантаження.
Зазвичай зворотний проксі не є якимось одним конкретним інструментом, а радше принципом організації трафіку, який можна реалізувати за допомогою різних програм: від reverse proxy NGINX до спеціалізованих рішень на кшталт HAProxy.


