Назад к обновлениям
New releaseJul 15, 2026

reproxy v1.7.0

Легковесный граничный HTTP(S) сервер и обратный прокси с автоматическим SSL, обнаружением Docker/Consul, аутентификацией по маршрутам, ограничением скорости и отказоустойчивостью на основе проверки здоровья.

Поделиться
Reproxy | Простой обратный прокси

Reproxy — это простой пограничный HTTP(s) сервер/обратный прокси, поддерживающий различные провайдеры (docker, static, file, consul catalog). Один или несколько провайдеров предоставляют информацию о запрашиваемом сервере, запрашиваемом URL, целевом URL и URL проверки работоспособности. Распространяется как единый бинарный файл или как docker-контейнер.

  • Автоматическое завершение SSL с Let's Encrypt
  • Поддержка пользовательских SSL-сертификатов
  • Простые, но гибкие правила прокси
  • Провайдер статических правил прокси из командной строки
  • Динамический провайдер правил прокси на основе файлов
  • Docker-провайдер с автоматическим обнаружением
  • Провайдер Consul Catalog с обнаружением по тегам сервисов
  • Поддержка нескольких (виртуальных) хостов
  • Опциональное сжатие трафика
  • Опциональный контроль доступа на основе IP
  • Базовая аутентификация для каждого маршрута
  • Заданные пользователем ограничения размера и таймауты
  • Единый бинарный файл
  • Docker-контейнер
  • Встроенный сервер статических ассетов с опциональным режимом "SPA friendly"
  • Поддержка правил перенаправления
  • Опциональный ограничитель как общей активности, так и активности пользователя
  • Проверка работоспособности в реальном времени и отказоустойчивость/балансировка нагрузки
  • Управляющий сервер с информацией о маршрутах и метриками prometheus
  • Поддержка плагинов через RPC для реализации собственной функциональности
  • Опциональное логирование в формате Apache Log Format и упрощённые отчёты в stdout.

build Coverage Status Go Report Card Docker Hub

Сервер (хост) может быть задан как FQDN, например s.example.com, * (любой) или регулярное выражение. Точное совпадение имеет приоритет, поэтому если есть два правила с серверами example.com и example\.(com|org), запрос к example.com/some/url будет соответствовать первому. Запрашиваемый URL может быть регулярным выражением, например ^/api/(.*), а целевой URL может содержать группы из регулярного выражения, например http://d.example.com:8080/$1. Для приведённого примера запрос http://s.example.com/api/something?foo=bar будет проксирован на http://d.example.com:8080/something?foo=bar.

Для удобства запросы с завершающим / и без групп регулярного выражения расширяются до /(.*), а целевые адреса в таких случаях расширяются до /$1. То есть /api/ -> http://127.0.0.1/service будет преобразовано в ^/api/(.*) -> http://127.0.0.1/service/$1.

Поддерживается подстановка хоста в целевой URL. Например, /files/${host} будет заменено на имя соответствующего хоста. Также можно использовать $host (без фигурных скобок).

Поддерживаются как HTTP, так и HTTPS. Для HTTPS можно использовать статический сертификат, а также автоматические сертификаты ACME (Let's Encrypt). Опциональный сервер ассетов может использоваться для раздачи статических файлов. Для запуска reproxy требуется как минимум один определённый провайдер. Остальные параметры строго опциональны и имеют разумные значения по умолчанию.

Примеры:

  • со статическим провайдером: reproxy --static.enabled --static.rule="*,example.com/api/(.*),https://api.example.com/$1"
  • с автоматическим обнаружением docker: reproxy --docker.enabled --docker.auto
  • как docker-контейнер: docker up -p 80:8080 umputun/reproxy --docker.enabled --docker.auto
  • с автоматическим SSL: docker up -p 80:8080 -p 443:8443 umputun/reproxy --docker.enabled --docker.auto --ssl.type=auto --ssl.fqdn=example.com

Установка

Reproxy распространяется как небольшой самодостаточный бинарный файл, а также как docker-образ. И бинарный файл, и образ поддерживают несколько архитектур и несколько операционных систем, включая linux_x86_64, linux_arm64, linux_arm, macos_x86_64, macos_arm64, windows_x86_64 и windows_arm. Мы также предоставляем deb- и rpm-пакеты для arm64 и x86.

  • для бинарной версии загрузите соответствующий файл из раздела релизов
  • для пользователей Homebrew: brew install umputun/apps/reproxy
  • docker-контейнер доступен на Docker Hub, а также на Github Container Registry. Например, docker pull umputun/reproxy или docker pull ghcr.io/umputun/reproxy.

Последняя стабильная версия имеет docker-тег :vX.Y.Z (с псевдонимом :latest), а текущий master — тег :master.

Провайдеры

Правила прокси предоставляются различными провайдерами. В настоящее время включены: file, docker, static и consul-catalog. Каждый провайдер может определять несколько правил маршрутизации как для проксируемых запросов, так и для статических ресурсов (assets). Пользователь может одновременно задавать несколько провайдеров.

Примеры различных провайдеров смотрите в examples

Статический провайдер

Это самый простой провайдер, определяющий все правила сопоставления непосредственно в командной строке (или окружении). Поддерживается несколько правил. Каждое правило состоит из 3–7 элементов, разделённых запятыми: server,sourceurl,destination[,ping-url[,forward-health-checks[,timeout[,throttle]]]]. Например:

  • *,^/api/(.*),https://api.example.com/$1 — проксировать все запросы к любому хосту/серверу с префиксом /api на https://api.example.com
  • example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping — проксировать все запросы к example.com с URL /foo/bar на https://api.example.com/zzz; для проверки работоспособности используется https://api.example.com/ping.
  • example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping,true — то же самое, но также перенаправляет запросы /ping и /health на бэкенд.
  • example.com,^/upload/(.*),https://api.example.com/$1,,,5m — таймаут запроса для маршрута 5 минут (4-е и 5-е поля оставлены пустыми, чтобы пропустить ping-url и forward-health-checks).
  • example.com,^/login,https://api.example.com/login,,,,2 — ограничение для маршрута 2 запроса/сек на пользователя (позиционные поля перед этим оставлены пустыми).

Четвёртый элемент задаёт опциональный ping-URL, используемый для отчётов о работоспособности. Пятый элемент опционально включает перенаправление запросов проверки работоспособности на бэкенд (true, yes, 1). Подробнее см. раздел Проверка работоспособности. Шестой элемент — опциональный таймаут запроса для маршрута (длительность Go, например 5m, 30s); 0 или пустое значение наследует глобальную настройку --timeout.write. Седьмой элемент — опциональное ограничение запросов/сек на пользователя для маршрута; 0 или пустое значение наследует --throttle.user. Допускается оставлять поля пустыми (например, ,, для неиспользуемых средних полей).

Файловый провайдер

Этот провайдер использует yaml-файл с правилами маршрутизации.

reproxy --file.enabled --file.name=config.yml

Категории