Substituí o Nginx por um Proxy Reverso que escrevi do zero (Meu primeiro projeto em Go)
Gostaria de compartilhar uma nova experiência com vocês.
Nunca utilizei Go antes, hoje foi a minha primeira vez. Queria começar algum projeto nessa lang mas não tinha ideia do que fazer, então quis me desafiar e comecei a fazer um reverse-proxy, com objetivo de criar uma alternativa ao nginx.
Eu queria construir algo onde a configuração fosse um YAML simples, legível e que já viesse com o essencial embutido. A biblioteca padrão do Go (net/http/httputil) resolve boa parte do trabalho pesado. O resultado foi o ApexProxy.
O que ele faz até agora:
- Roteamento baseado em Host e Path.
- Load Balancing (Round-Robin, IP-Hash e Single).
- TLS automático com Let's Encrypt (usando
autocert), sem precisar configurar Certbot por fora. - Dashboard TUI no terminal para monitorar conexões, latência, uso de banda e os status HTTP (2xx, 4xx, 5xx) em tempo real. (WIP)
Coloquei ele para rodar substituindo o Nginx no meu site. O processo está consumindo cerca de ~3 MB de RAM. Pelo painel, já consigo monitorar os bots de scan genéricos da internet procurando rotas como /.env ou /dns-query e tomando 502, sem encostar na aplicação.

Se alguém com experiência em Go quiser dar um code review, apontar erros na arquitetura ou testar, o repositório é esse:
https://github.com/Niix-Dan/ApexProxy
Abaixo está um print de um scan/ataque em andamento. Repare que alguns endpoints retornaram status [UP]. Isso aconteceu porque o bot fez a requisição utilizando o domínio correto configurado no reverse-proxy. O proxy fez o repasse legítimo e o bot acabou caindo na página de fallback customizada do próprio website (Page Not Found / 404 do backend):
Ele retornou UP pra alguns endpoints pois o bot passou utilizando o dominio que estava configurado no reverse-proxy e caiu na página de fallback do website (Page not found customizada)
