Migração 100% grátis + 1 mês grátis com cupom MIGRAR1MES · novos clientes em planos até R$ 200/mês Migrar agora

n8n · webhooks públicos

Como expor webhooks do n8n com HTTPS, autenticação e proteção contra spam usando Caddy ou Traefik.

Toda automação no n8n que recebe dado externo precisa de um webhook público com HTTPS — seja para EvolutionAPI, formulário do site, ou um serviço terceiro.

Configuração obrigatória

No docker-compose.yml, defina sempre:

environment:
  N8N_HOST: n8n.exemplo.com
  N8N_PROTOCOL: https
  WEBHOOK_URL: https://n8n.exemplo.com/

A WEBHOOK_URL é o que o n8n usa para gerar a URL pública do webhook nos workflows. Sem ela, ele exibe o IP local e os webhooks não funcionam.

Reverse proxy com Caddy

O Caddy já cuida do certificado Let’s Encrypt automaticamente:

n8n.exemplo.com {
  reverse_proxy n8n-main:5678

  # Bloqueia o editor em rede pública (opcional)
  @editor path / /workflow* /credentials* /executions*
  basicauth @editor {
    admin $2a$14$...hash_bcrypt
  }
}

Autenticação no webhook

No n8n, cada webhook node permite escolher:

  • None (público) — só use se a URL é secreta o suficiente
  • Basic Auth (usuário + senha)
  • Header Auth (validar X-API-Key, por exemplo)
  • JWT (validar bearer token)

Para EvolutionAPI, o padrão é None com URL secreta (/webhook/abc-123-supersecreto).

Proteção contra spam

Se o webhook fica público (formulário, callback de OAuth):

  1. Rate limiting no Caddy:
    @webhook path /webhook/*
    rate_limit @webhook 30r/m
  2. Cloudflare na frente — o plano gratuito já bloqueia bots conhecidos
  3. IF node validando User-Agent ou origem antes de processar

Headers úteis

O n8n expõe no webhook node:

  • $json.headers — todos os headers da requisição
  • $json.query — query string parseada
  • $json.body — corpo (JSON ou form-data)

Para ler o IP real (atrás de Caddy/Cloudflare), pegue $json.headers['x-forwarded-for'] em vez de x-real-ip.

Próximos passos

Última atualização: