Night Watch
Houd je sites online tijdens scraper-overlast: een uptime-watch, een Cloudflare Free-plan-schild en een botpoort.
- Linux
- Python 3.10+
- Cloudflare Free plan
- ASGI or WSGI apps

Wat het doet
Night Watch opent elke site die je draait zoals een bezoeker dat doet, om de vijf minuten, en laat je meteen weten wanneer een site niet meer opent en wanneer deze weer terug is. Als een site omvalt omdat een scraper deze overspoelt, schakelt de watch een Cloudflare-regel in die de vloedgolf aan de edge stopt, terwijl je app mensen blijft bedienen zolang dit duurt.
- Elke site, elke vijf minuten. Elke zone in je Cloudflare-account, plus elke pagina die je vermeldt, optioneel met tekst die de pagina moet bevatten. Eén bericht wanneer een site uitvalt, één wanneer deze weer online is met de duur van de uitval, en een herinnering zolang deze uit blijft. Via e-mail, een chat-webhook, of beide.
- Een schild op het Free-plan. Drie aangepaste WAF-regels: een Chrome-gebruikersagent zonder de headers die elke echte Chrome stuurt krijgt een challenge, paginaverzoeken van scraper-clouds krijgen een challenge, en een noodregel challenge vreemden zonder cookie en zonder link tijdens een vloedgolf.
- Zelfstandig ingeschakeld. Wanneer een site uitvalt door overbelasting, schakelt de watch de noodregel in en meldt dit in de alarmmelding; uren nadat de site weer online is, schakelt deze deze uit. Een schild dat je zelf hebt ingeschakeld, blijft aan.
- Een poort in je app. Eén bestand zonder afhankelijkheden, voor FastAPI, Starlette, Django, Flask of elke ASGI- of WSGI-app. Het weigert nepbrowsers voordat je code draait en houdt vreemden binnen wat elke worker kan bedienen. Mensen met een cookie of die via een link binnenkomen, merken er niets van.
- Zie wat je treft. Wat de firewall van Cloudflare in de afgelopen minuten heeft challenged, per regel, netwerk, land, gebruikersagent en pad, gelezen uit de ruwe events die het Free-plan toestaat.
- Undo ingebouwd. Elke regelwijziging slaat eerst de regels van de zone op, je eigen regels blijven op hun plaats vóór de onze, en één commando herstelt de opgeslagen set.
Getest op onze eigen sites
- Een echte vloedgolf, één uur: op een van onze sites challenge de nepbrowser-regel meer dan 10.000 verzoeken. De 10.000 die Cloudflare ons laat lezen, kwamen van 9.627 thuisbreedbandadressen, waarvan er geen meer dan 4 stuurde: een snelheidslimiet per adres had nooit geactiveerd.
- Elke regel, live getest op het Free-plan: een vreemde werd challenged terwijl de noodregel aan stond en doorgelaten met een cookie of een link; een Chrome-gebruikersagent zonder browserheaders werd challenged; Googlebot kwam door. De eerdere regels van de zone werden daarna exact hersteld.
- De poort onder 1.747 aanvragen per seconde op uvicorn: elke scraper zonder browserheaders geweigerd, vreemden beperkt tot wat de app kon leveren, en elke terugkerende bezoeker, linkbezoeker en Googlebot-aanvraag bediend in een mediaan van 0,20 seconden, de eigen tijd van de pagina.
Wat zit erin
De bewaking
Sites uit je Cloudflare-account en een lijst, controles die op een bezoeker lijken, meldingen per e-mail of webhook, en een test die "alles plat" onderscheidt van "deze machine is offline".
Het schild
Installeren, status, aan, uit, verwijderen en herstellen voor één zone of alle, met elke wijziging eerst als back-up.
De poort
ASGI- en WSGI-middleware, een "een moment"-pagina van 2 seconden die mensen een cookie geeft, en één logregel per minuut.
De runbook
Wat te doen als een site traag is of plat, hoe je een vloedgolf leest, en wat je niet moet inschakelen in het Cloudflare-dashboard.
Vereisten
- Linux met systemd en Python 3.10 of nieuwer; niets te installeren via pip.
- Voor het schild en de evenementweergave, sites op Cloudflare (elk plan, inclusief het Free plan) en een API-token.
- Een andere machine dan die welke je sites bedient, zodat deze je kan waarschuwen wanneer die ene plat is.
Goed om te weten
- De noodregel stelt ook een persoon die je adres in een nieuwe browser typt op de proef, daarom staat deze uit behalve tijdens een vloedgolf.
- Geverifieerde bots en robots die zichzelf noemen worden nooit op de proef gesteld, en zoekmachines worden door de poort nooit geweigerd.
- Het schild gebruikt drie van de vijf aangepaste regels die het Free plan per zone toestaat.
Vragen
Heb ik een betaald Cloudflare-plan nodig?
Nee. Alles wat Night Watch doet, werkt op het Free plan: de drie regels, de evenementweergave en het automatische schakelen. Een betaald plan geeft je alleen meer regelslots naast de onze.
Blokkeert het Google of AI-zoekcrawlers?
Nee. Cloudflare's geverifieerde bots en elke robot die zichzelf noemt in de user agent passeren het schild, en de poort wijst nooit een zoekmachine of linkpreview af. Als je AI-crawlers wilt blokkeren, is dat een aparte keuze in het Cloudflare-dashboard.
Mijn site staat niet op Cloudflare. Is het nog steeds nuttig?
De bewaking en de poort werken overal: de bewaking opent elke URL, en de poort beschermt elke Python-webapp. Het schild en de evenementweergave hebben Cloudflare nodig.
Wat is het verschil met een uptime-monitor?
Een uptime-monitor vertelt je dat een site offline is. Night Watch doet dat ook, en handelt vervolgens op de meest voorkomende oorzaak die we zien: het schakelt het schild in aan de rand van Cloudflare, en de poort houdt je app beschikbaar voor de mensen die je wilt bedienen zolang de vloedgolf aanhoudt.
Bijgewerkt: