Voltar às atualizações
New releaseJul 15, 2026

reproxy v1.7.0

Servidor HTTP(S) de borda leve e proxy reverso com SSL automático, descoberta Docker/Consul, autenticação por rota, limitação de taxa e failover baseado em verificação de integridade.

Compartilhar
Reproxy | Simple Reverse Proxy

Reproxy é um servidor HTTP(s) de borda simples / proxy reverso que suporta vários provedores (docker, estático, arquivo, catálogo consul). Um ou mais provedores fornecem informações sobre o servidor solicitado, a URL solicitada, a URL de destino e a URL de verificação de integridade. É distribuído como um único binário ou como um contêiner docker.

  • Terminação SSL automática com Let's Encrypt
  • Suporte a certificados SSL fornecidos pelo usuário
  • Regras de proxy simples, mas flexíveis
  • Provedor de regras de proxy estático, via linha de comando
  • Provedor de regras de proxy dinâmico, baseado em arquivo
  • Provedor Docker com descoberta automática
  • Provedor Consul Catalog com descoberta por tags de serviço
  • Suporte a múltiplos hosts (virtuais)
  • Compressão de tráfego opcional
  • Controle de acesso opcional baseado em IP
  • Autenticação básica por rota
  • Limites de tamanho e timeouts definidos pelo usuário
  • Distribuição em binário único
  • Distribuição em contêiner Docker
  • Servidor de assets estáticos integrado com modo opcional "SPA friendly"
  • Suporte a regras de redirecionamento
  • Limitador opcional para a atividade geral, bem como para a atividade do usuário
  • Verificação de integridade em tempo real e fail-over/balanceamento de carga
  • Servidor de gerenciamento com informações de rotas e métricas prometheus
  • Suporte a plugins via RPC para implementar funcionalidades personalizadas
  • Logging opcional com o Apache Log Format e relatórios simplificados no stdout.

build Coverage Status Go Report Card Docker Hub

O servidor (host) pode ser definido como FQDN, ou seja, s.example.com, * (catch all) ou uma regex. A correspondência exata tem prioridade, portanto, se houver duas regras com servidores example.com e example\.(com|org), a requisição para example.com/some/url corresponderá à primeira. A URL solicitada pode ser uma regex, por exemplo ^/api/(.*), e a URL de destino pode conter grupos correspondentes da regex, ou seja, http://d.example.com:8080/$1. Para o exemplo acima, http://s.example.com/api/something?foo=bar será encaminhado via proxy para http://d.example.com:8080/something?foo=bar.

Por conveniência, requisições com / no final e sem grupos de regex são expandidas para /(.*), e os destinos nesses casos são expandidos para /$1. Ou seja, /api/ -> http://127.0.0.1/service será traduzido para ^/api/(.*) -> http://127.0.0.1/service/$1.

A substituição de host é suportada na URL de destino. Por exemplo, /files/${host} será substituído pelo nome do host correspondente. $host (sem chaves) também pode ser usado.

Tanto HTTP quanto HTTPS são suportados. Para HTTPS, certificado estático pode ser usado, bem como certificados ACME automatizados (Let's Encrypt). Um servidor de assets opcional pode ser usado para servir arquivos estáticos. Iniciar o reproxy requer pelo menos um provedor definido. O restante dos parâmetros é estritamente opcional e possui padrões sensatos.

Exemplos:

  • com um provedor estático: reproxy --static.enabled --static.rule="*,example.com/api/(.*),https://api.example.com/$1"
  • com descoberta automática do docker: reproxy --docker.enabled --docker.auto
  • como um contêiner docker: docker up -p 80:8080 umputun/reproxy --docker.enabled --docker.auto
  • com SSL automático: docker up -p 80:8080 -p 443:8443 umputun/reproxy --docker.enabled --docker.auto --ssl.type=auto --ssl.fqdn=example.com

Instalação

O Reproxy é distribuído como um pequeno binário autocontido, bem como uma imagem docker. Tanto o binário quanto a imagem suportam múltiplas arquiteturas e múltiplos sistemas operacionais, incluindo linux_x86_64, linux_arm64, linux_arm, macos_x86_64, macos_arm64, windows_x86_64 e windows_arm. Também fornecemos pacotes deb e rpm para arm64 e x86.

  • para uma distribuição binária, baixe o arquivo apropriado na seção de releases
  • para usuários do Homebrew: brew install umputun/apps/reproxy
  • container docker disponível no Docker Hub, bem como no Github Container Registry. Ou seja, docker pull umputun/reproxy ou docker pull ghcr.io/umputun/reproxy.

A versão estável mais recente tem a tag docker :vX.Y.Z (com o alias :latest) e o master atual tem a tag :master.

Providers

Regras de proxy fornecidas por vários providers. Atualmente incluídos - file, docker, static e consul-catalog. Cada provider pode definir múltiplas regras de roteamento tanto para requisições proxiadas quanto para estáticos (assets). O usuário pode definir vários providers ao mesmo tempo.

Veja exemplos de vários providers em examples

Static provider

Este é o provider mais simples, que define todas as regras de mapeamento diretamente na linha de comando (ou ambiente). Múltiplas regras são suportadas. Cada regra é composta de 3 a 7 elementos separados por vírgula server,sourceurl,destination[,ping-url[,forward-health-checks[,timeout[,throttle]]]]. Por exemplo:

  • *,^/api/(.*),https://api.example.com/$1 - proxiar todas as requisições para qualquer host/server com prefixo /api para https://api.example.com
  • example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping - proxiar todas as requisições para example.com e com url /foo/bar para https://api.example.com/zzz e ele consulta https://api.example.com/ping para o health check.
  • example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping,true - o mesmo que acima, mas também encaminha requisições /ping e /health para o backend.
  • example.com,^/upload/(.*),https://api.example.com/$1,,,5m - timeout de requisição por rota de 5 minutos (4º e 5º campos deixados vazios para pular ping-url e forward-health-checks).
  • example.com,^/login,https://api.example.com/login,,,,2 - throttle por rota de 2 req/seg por usuário (os campos posicionais anteriores são deixados vazios).

O 4º elemento define uma ping url opcional usada para relatório de saúde. O 5º elemento opcionalmente habilita o encaminhamento de requisições de health check para o backend (true, yes, 1). Veja a seção Health check para mais detalhes. O 6º elemento é um timeout de requisição por rota opcional (duração Go, por exemplo 5m, 30s); 0 ou vazio herda a configuração global --timeout.write. O 7º elemento é um limite opcional de req/seg por usuário por rota; 0 ou vazio herda --throttle.user. Campos posicionais vazios são permitidos (por exemplo, ,, para os campos intermediários não utilizados).

File provider

Este provider usa um arquivo yaml com regras de roteamento.

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

Exemplo de config.yml:

Categorias