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 | Proxy Reverso Simples

Reproxy é um servidor HTTP(s) de borda / proxy reverso simples que suporta vários provedores (docker, estático, arquivo, catálogo consul). Um ou mais provedores fornecem informações sobre o servidor solicitado, URL solicitada, URL de destino e URL de verificação de integridade. Ele é 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 baseado em IP opcional
  • Autenticação básica por rota
  • Limites de tamanho e timeouts definidos pelo usuário
  • Distribuição em único binário
  • Distribuição em contêiner Docker
  • Servidor de assets estáticos integrado com modo "SPA friendly" opcional
  • Suporte a regras de redirecionamento
  • Limitador opcional para atividade geral e por usuário
  • Verificação de integridade ao vivo 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
  • Log opcional tanto no formato Apache Log Format quanto relatórios simplificados no stdout.

build Coverage Status Go Report Card Docker Hub

O servidor (host) pode ser definido como FQDN, ex: s.example.com, * (captura todos) ou uma regex. A correspondência exata tem prioridade, portanto, se houver duas regras com servidores example.com e example\.(com|org), uma 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 ter grupos correspondentes por regex, ex: http://d.example.com:8080/$1. Para o exemplo acima, http://s.example.com/api/something?foo=bar será proxyada para http://d.example.com:8080/something?foo=bar.

Por conveniência, requisições com a barra / final e sem grupos de regex são expandidas para /(.*), e destinos nesses casos são expandidos para /$1. Ex: /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, um 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 que pelo menos um provedor seja definido. O restante dos parâmetros são estritamente opcionais e possuem 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

Reproxy é distribuído como um pequeno binário independente, 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.

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

Provedores

As regras de proxy são fornecidas por vários provedores. Atualmente incluídos - file, docker, static e consul-catalog. Cada provedor pode definir múltiplas regras de roteamento tanto para requisições proxyadas quanto para estáticos (assets). O usuário pode configurar vários provedores ao mesmo tempo.

Veja exemplos de vários provedores em examples

Provedor estático

Este é o provedor mais simples, definindo todas as regras de mapeamento diretamente na linha de comando (ou ambiente). Múltiplas regras são suportadas. Cada regra possui de 3 a 7 elementos separados por vírgula servidor,urlorigem,destino[,url-ping[,encaminhar-verificacoes-saude[,timeout[,throttle]]]]. Por exemplo:

  • *,^/api/(.*),https://api.example.com/$1 - proxy todas as requisições para qualquer host/servidor com prefixo /api para https://api.example.com
  • example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping - proxy todas as requisições para example.com com a URL /foo/bar para https://api.example.com/zzz e usa https://api.example.com/ping para a verificação de integridade.
  • example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping,true - igual ao 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 ignorar url-ping e encaminhar-verificacoes-saude).
  • example.com,^/login,https://api.example.com/login,,,,2 - throttle por rota de 2 req/s por usuário (campos posicionais anteriores deixados vazios).

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

Provedor de arquivo

Este provedor usa um arquivo yaml com regras de roteamento.

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

Categorias