Reverse proxy vs туннель: в чём разница

Reverse proxy и туннель решают противоположные задачи. Reverse proxy (nginx, Caddy, Traefik) стоит перед публично доступным сервером и распределяет входящие запросы. Туннель делает локальный сервер за NAT доступным из интернета через промежуточный relay. Ключевое отличие: reverse proxy требует, чтобы ваш сервер уже был в публичной сети, а туннель — нет.

Почему их путают? Потому что оба стоят между клиентом и сервером. Но роли у них принципиально разные. Reverse proxy — «привратник» перед продакшен-серверами. Туннель — «мост» между вашим localhost и интернетом. Когда эта разница ясна, выбор инструмента становится очевидным. Если вы только начинаете разбираться в туннелях — загляните в «Что такое туннелирование».

Что такое reverse proxy

Reverse proxy — это сервер, который принимает HTTP-запросы из интернета и перенаправляет их на один или несколько бэкенд-серверов. Клиент не знает, куда именно уходит запрос — он общается только с прокси. Самые популярные реализации: nginx, Caddy и Traefik.

Что делает reverse proxy

  • SSL-терминация — принимает HTTPS, расшифровывает и передаёт HTTP на бэкенд.
  • Балансировка нагрузки — распределяет запросы между несколькими экземплярами приложения.
  • Кеширование — хранит статику и ответы, снижая нагрузку на бэкенд.
  • Маршрутизация — направляет запросы по URL или заголовкам на разные сервисы.
  • Защита — скрывает внутреннюю архитектуру, фильтрует запросы, ограничивает rate.

Как выглядит трафик через reverse proxy

Клиент (браузер)
      |
      v
+---------------------+
|  Reverse proxy       |  <- https://example.com
|  (nginx / Caddy)     |
+-----+-------+-------+
      |       |
      v       v
+--------+ +--------+
| App :1 | | App :2 |  <- внутренняя сеть (10.0.0.x)
+--------+ +--------+

Важный момент: бэкенд-серверы App :1 и App :2 находятся в той же сети, что и reverse proxy, или доступны ему по внутреннему IP. Все они уже находятся в публичной инфраструктуре.

Что такое туннель

Туннель — это инструмент, который позволяет серверу за NAT, файрволом или на localhost стать доступным из интернета. Клиент на вашей машине устанавливает исходящее соединение с публичным relay-сервером, и тот маршрутизирует входящий трафик обратно к вам. Механику подробно разбирает статья «Что такое туннелирование».

Что делает туннель

  • Проброс localhost — делает localhost:3000 доступным по публичному URL.
  • Обход NAT — работает без статического IP и проброса портов.
  • HTTPS из коробки — relay-сервер предоставляет TLS-сертификат.
  • Нулевая конфигурация сети — не нужно менять настройки файрвола или роутера.

Как выглядит трафик через туннель

Клиент (браузер, вебхук)
      |
      v
+------------------------+
|  Relay-сервер           |  <- https://abc123.fxtun.dev
|  (fxTunnel server)      |
+-----------+------------+
            |  зашифрованное исходящее
            |  соединение (инициировано клиентом)
            v
+------------------------+
|  Ваш компьютер          |  <- localhost:3000
|  (за NAT / файрволом)   |
+------------------------+

Ключевое отличие от reverse proxy: соединение между relay и вашим компьютером инициируется изнутри вашей сети. Именно поэтому NAT и файрвол не мешают — они блокируют входящие соединения, но не исходящие.

Главное отличие: публичный сервер vs localhost

Reverse proxy требует, чтобы бэкенд уже был доступен в сети — на VPS, в облаке или в дата-центре. Туннель работает с сервером, который находится за NAT, файрволом или просто на вашем ноутбуке. Это фундаментальное отличие определяет, когда какой инструмент уместен.

ПараметрReverse proxyТуннель
Бэкенд в публичной сетиДа, обязательноНет, работает за NAT
Статический IPНуженНе нужен
Настройка DNSДаНет (автоматический URL)
Направление соединенияКлиент -> Proxy -> БэкендБэкенд -> Relay <- Клиент

Сравнительная таблица: reverse proxy vs туннель

Разбираем ключевые параметры, по которым удобно сравнивать. Если вас также интересует выбор между конкретными туннелями, посмотрите ngrok vs Cloudflare vs fxTunnel.

КритерийReverse proxy (nginx, Caddy)Туннель (fxTunnel, ngrok)
Основная задачаМаршрутизация трафика к бэкендуПроброс localhost в интернет
Требует публичный серверДаНет
Сложность настройкиСредняя — высокаяМинимальная (одна команда)
HTTPSLet’s Encrypt / ручной сертификатАвтоматический от relay
Балансировка нагрузкиДаНет
КешированиеДаНет
СтоимостьVPS от $5/мес + настройкаБесплатно (fxTunnel)
Время запускаМинуты — часыСекунды
МасштабированиеГоризонтальное, неограниченноОграничено каналом relay
Типичная средаПродакшенРазработка, тестирование

Когда использовать reverse proxy

Приложение задеплоено на сервер, нужна балансировка нагрузки, SSL-терминация, кеширование или маршрутизация между сервисами? Это территория reverse proxy.

Типичные сценарии для reverse proxy

  • Продакшен-деплой — nginx или Caddy перед вашим приложением на VPS или в Kubernetes.
  • Балансировка нагрузки — распределение запросов между несколькими экземплярами приложения.
  • SSL-терминация — Caddy автоматически получает сертификат Let’s Encrypt, nginx — через certbot.
  • Кеширование статики — nginx отдаёт CSS, JS и изображения без обращения к бэкенду.
  • API-шлюз — маршрутизация /api/v1/* на один сервис, /api/v2/* на другой.
  • Защита от DDoS — rate limiting, фильтрация запросов, скрытие внутренней архитектуры.

Пример: nginx как reverse proxy

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:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Когда использовать туннель

Когда ваш сервер не в публичной сети — локальная разработка, тестирование вебхуков, демо для заказчика, IoT за NAT — туннель выручает одной командой. Больше сценариев разобрано в «Как открыть localhost».

Типичные сценарии для туннеля

  • Разработка — показать проект коллеге или заказчику без деплоя.
  • Вебхуки — получить запросы от Stripe, GitHub, Telegram на localhost. Пошаговый гайд – в «Тестирование вебхуков через туннель».
  • Демонстрации — одноразовый URL для презентации.
  • IoT за NAT — доступ к Raspberry Pi, домашнему серверу, камерам.
  • Мобильная разработка — реальное устройство подключается к локальному API.
  • Командная интеграция — микросервисы на ноутбуках разработчиков связываются через туннели.

Пример: fxTunnel для localhost

# Установка
curl -fsSL https://fxtun.dev/install.sh | bash

# HTTP-туннель к локальному серверу
fxtunnel http 3000
# -> https://d7f2a.fxtun.dev -> localhost:3000

# TCP-туннель к базе данных
fxtunnel tcp 5432

Через 30 секунд ваш localhost доступен из интернета. Без VPS, без DNS, без статического IP. Интересно, как это устроено внутри? Смотрите архитектуру fxTunnel.

Можно ли комбинировать reverse proxy и туннель

Да, и это распространённый подход. Reverse proxy и туннель не конкурируют — они работают на разных этапах жизненного цикла проекта и могут дополнять друг друга.

Схема: туннель для разработки, reverse proxy для продакшена

РАЗРАБОТКА                          ПРОДАКШЕН

localhost:3000                      App :8080 (VPS)
      |                                  |
      v                                  v
+-------------+                   +--------------+
| fxTunnel    |                   | nginx/Caddy  |
| (relay)     |                   | (reverse     |
|             |                   |  proxy)      |
+-------------+                   +--------------+
      |                                  |
      v                                  v
https://abc.fxtun.dev             https://example.com

Когда комбинация полезна

  • Dev -> Prod переход — разрабатываете с fxTunnel, деплоите за nginx. Никаких конфликтов.
  • IoT + продакшен — основное приложение за reverse proxy, IoT-устройства за NAT подключаются через туннель.
  • Staging через туннель — вместо настройки staging-сервера открываете туннель к локальной копии и отправляете ссылку QA-команде.
  • SSH-доступ к серверу за NATSSH-туннель vs современные инструменты разбирает этот сценарий подробно.

Итоги: что выбрать

Выбор между reverse proxy и туннелем зависит не от качества инструмента, а от того, где находится ваш сервер и для чего вы его открываете.

Ваша ситуацияИнструмент
Приложение на VPS / в облаке, нужна балансировка и HTTPSReverse proxy (nginx, Caddy)
Локальная разработка, нужен публичный URLТуннель (fxTunnel)
Тестирование вебхуков от Stripe / GitHubТуннель (fxTunnel)
Продакшен с высокой нагрузкойReverse proxy (nginx, Traefik)
IoT-устройство за NATТуннель (fxTunnel)
Демо для заказчика без деплояТуннель (fxTunnel)
Микросервисная архитектура в продакшенеReverse proxy (Traefik, nginx)

Для разработки и тестирования хорошая отправная точка — fxTunnel: бесплатный, open source, запуск за 30 секунд:

curl -fsSL https://fxtun.dev/install.sh | bash
fxtunnel http 3000

Для продакшена настройте nginx или Caddy как reverse proxy перед вашим приложением.

FAQ

Чем reverse proxy отличается от туннеля?

Проще всего понять так: reverse proxy (nginx, Caddy, Traefik) распределяет трафик между бэкенд-серверами, которые уже доступны в сети. Туннель работает наоборот — он выводит сервер из-за NAT или файрвола в интернет через промежуточный relay. Суть в том, что reverse proxy подразумевает публичный сервер, а туннель обходится без него.

Можно ли использовать reverse proxy и туннель одновременно?

Да, и это обычная практика. Многие команды работают через fxTunnel на этапе разработки, а при деплое ставят nginx или Caddy. Можно использовать оба параллельно: например, IoT-устройства за NAT идут через туннель, а основное веб-приложение — через reverse proxy.

Что лучше для разработки — nginx или туннель?

Пока вы работаете локально, туннель проще во всём: не нужен сервер, статический IP или DNS. Одна команда fxtunnel http 3000 — и у вас публичный URL. А nginx пригодится на следующем этапе, когда приложение переедет на сервер.

Заменяет ли туннель reverse proxy?

Нет — они про разное. Туннель нужен, чтобы вытащить сервер из-за NAT (разработка, демо, вебхуки, IoT). Reverse proxy управляет трафиком в продакшене (балансировка, SSL, кеш, маршрутизация). На практике в большинстве проектов вы используете оба на разных этапах.

Можно ли использовать ngrok вместо nginx?

Одно другим не заменить. ngrok (как и fxTunnel) — это туннель, который открывает localhost в интернет. nginx — reverse proxy для продакшена. Они нужны на разных этапах: туннель во время разработки, nginx или Caddy после деплоя.