Migração 100% grátis + 1 mês grátis com cupom MIGRAR1MES · novos clientes em planos até R$ 200/mês Migrar agora
Agente de IA no WhatsApp por R$ 299/mês · stack montada e gerenciada pelo nosso time Quero meu agente
VPS com OpenClaw pré-instalado · 1ª mensalidade de R$ 56,90 por R$ 29,99 (-47%) · gerenciada pela Rollin Quero a VPS
VPS com Hermes Agent pré-instalado · 1ª mensalidade de R$ 56,90 por R$ 29,99 (-47%) · gerenciada pela Rollin Quero a VPS
Hospedagem com 30 dias de garantia · Não gostou? Devolvemos 100%, sem perguntas. Ver hospedagem

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: