Instale o Qlyne num app Next.js
Para um app Next.js na Vercel, ou em qualquer hospedagem que rode Next.js, sem Cloudflare. O Qlyne roda como o middleware do app: as mesmas regras do conector do Cloudflare, decididas antes de cada página e rota de API, com sala de espera, desafio, limites de requisições, endereços bloqueados, robôs de IA, proteção de login e portões de acesso.
1. Ponha o arquivo e o middleware
Seção intitulada “1. Ponha o arquivo e o middleware”No painel, abra o seu site, Connector, “Install on Next.js”, e clique em Download qlyne-next.mjs. O arquivo já vem com o identificador do site, o endereço do Qlyne e a chave que confere as regras. Coloque na raiz do projeto, ao lado do package.json.
Crie também o proxy.js na raiz (Next.js 16; no Next.js 13 a 15 o arquivo é middleware.js, com o mesmo conteúdo):
import { qlyne } from './qlyne-next.mjs';
export default qlyne();export const config = { matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'] };O matcher deixa de fora os arquivos do próprio Next.js, para eles não contarem como visita. Se o projeto já tem um middleware, chame o Qlyne primeiro e deixe o seu para o que o Qlyne liberar:
import { qlyne } from './qlyne-next.mjs';
const proteger = qlyne();
export default async function proxy(request, event) { const response = await proteger(request, event); if (!response.headers.get('x-middleware-next')) return response; // barrado, desafiado ou mandado para a fila return seuMiddleware(request, event);}2. Ponha o segredo e publique
Seção intitulada “2. Ponha o segredo e publique”Crie a variável de ambiente QLYNE_SECRET com o segredo do conector (em Connector, “Generate secret”). Na Vercel: Settings, Environment Variables, para Production e Preview. Depois publique.
Deixe o modo em “Observe only” no começo e confira as últimas 24 horas na Overview do site. Com os números fazendo sentido, mude para “Enforce” em Connector. As mudanças chegam ao middleware em até um minuto, sem publicar de novo.
O que funciona e o que não
Seção intitulada “O que funciona e o que não”O middleware decide antes de o app responder, mas nunca vê a resposta. Por isso:
| Regra | No Next.js |
|---|---|
| Sala de espera, desafio, modo sob ataque | Sim |
| Endereços bloqueados e de confiança, Tor, suas regras | Sim; o país vem da Vercel (x-vercel-ip-country), a rede (ASN) fica desconhecida, então condição sobre ela nunca casa |
| Robôs de IA | Barrados pelo user agent; o grupo de IA não entra no robots.txt |
| Limites de requisições | Contados pelo servidor do Qlyne, somando todas as instâncias do app (uma chamada ao Qlyne nas rotas com limite, na casa de dezenas de milissegundos); se ele não responder a tempo, cada instância conta sozinha até ele voltar. qlyne({ rateLimit: 'memory' }) deixa a conta só em cada instância |
| Proteção de login, portões, armadilha para scanner, regras gerenciadas (WAF) | Sim; o WAF lê corpos de formulário e JSON de até 16 KB de uma cópia, então o app recebe a requisição inteira |
| Formulários protegidos | Não: o middleware não consegue pôr os campos escondidos na página. Use o captcha de formulário |
| Cabeçalhos de segurança e CSP | Vão em todas as respostas; a nota no painel precisa do Cloudflare ou do proxy |
| Sinais para o app | Sim, como headers da requisição (Qlyne-Country, Qlyne-Leaked-Password…) |
| Nota de robô | Sim, com o script no layout (abaixo); a página-isca vai por rewrite |
| Reputação entre sites | Sim, pelo IP que a Vercel informa |
Leia os sinais numa rota ou componente de servidor com headers() de next/headers.
Nota de robô
Seção intitulada “Nota de robô”O middleware não consegue pôr o script da nota de robô nas páginas, então ponha no layout raiz (app/layout.js), dentro do <head>:
<script src="/__qlyne/s.js" async></script>O middleware serve o script e recebe o resumo em /__qlyne/s; o matcher de cima já cobre os dois caminhos. Com a nota desligada no painel, eles vão para o app, que responde 404, e nada mais muda. O que a nota faz está no guia do Cloudflare.
O IP do visitante
Seção intitulada “O IP do visitante”Na Vercel o middleware lê o IP do x-real-ip e do x-forwarded-for, que a Vercel preenche e o visitante não consegue forjar. Em servidor próprio, garanta que o proxy reverso na frente do Next.js (nginx, Caddy) sobrescreva esses headers com o endereço real; senão um visitante mandaria um falso e escaparia das regras por IP.
Atualização
Seção intitulada “Atualização”A versão está na primeira linha do arquivo. Para atualizar, baixe de novo, troque e publique. As regras ficam no painel; o arquivo só leva o código.