Night Watch
抵御爬虫洪峰,保持网站在线:正常运行时间监控、Cloudflare 免费版防护和机器人关卡。
- Linux
- Python 3.10+
- Cloudflare Free plan
- ASGI or WSGI apps

功能介绍
Night Watch 以访客的方式打开你运行的每一个站点,每五分钟一次,并在某个站点停止打开和恢复的那一刻通知你。当站点因爬虫泛滥而崩溃时,Watch 会启用一条 Cloudflare 规则,在边缘拦截泛滥流量,让你的应用在此期间继续为用户服务。
- 每五分钟检查每个站点。 检查你 Cloudflare 账户中的每个区域,以及你列出的任何页面(可选配页面必须包含的文本)。站点宕机时发一条消息,恢复时发一条消息并说明宕机时长,宕机期间发送提醒。通过邮件、聊天 Webhook 或两者兼有。
- 免费版上的防护盾。 三条 WAF 自定义规则:缺少真实 Chrome 必发请求头的 Chrome 用户代理将收到挑战;来自爬虫云的页面请求将收到挑战;紧急规则在泛滥期间对无 Cookie 且无来源链接的陌生访客发起挑战。
- 自动启用。 当站点因过载而宕机时,Watch 会启用紧急规则并在警报中说明;站点恢复数小时后,它会自动关闭该规则。你自己启用的防护盾会保持开启状态。
- 应用内部的关卡。 一个无依赖的单文件,适用于 FastAPI、Starlette、Django、Flask 或任何 ASGI/WSGI 应用。它在你的代码运行前拒绝伪浏览器,并将陌生访客限制在每个工作进程可服务的范围内。携带 Cookie 或通过链接进入的用户完全不会察觉。
- 查看谁在攻击你。 从免费版允许的原始事件中读取,显示 Cloudflare 防火墙在最近几分钟内根据规则、网络、国家、用户代理和路径拦截了哪些请求。
- 内置撤销功能。 每次规则变更都会先保存区域的规则,你自己的规则保留在我们的规则之前,一条命令即可恢复已保存的规则集。
在我们的站点上经过测试
- 真实泛滥,持续一小时: 在我们的一个站点上,伪浏览器规则挑战了超过 10,000 个请求。Cloudflare 允许我们读取的 10,000 个请求来自 9,627 个家庭宽带地址,没有一个地址发送超过 4 次请求:按地址限速永远不会触发。
- 在免费版上实时探测每条规则: 紧急规则开启时,陌生访客被挑战,但携带 Cookie 或来源链接时被放行;缺少浏览器请求头的 Chrome 用户代理被挑战;Googlebot 通过。随后,区域的原有规则被精确恢复。
- uvicorn 上每秒 1,747 次请求下的防护机制:拒绝所有不带浏览器标头的爬虫,将陌生访客限制在应用可提供的范围内,并为每位回访者、链接访客和 Googlebot 请求提供中位数 0.20 秒的响应时间,即页面自身的加载时间。
套件包含哪些内容
监控
来自您的 Cloudflare 账户和列表的网站,模拟访客的检查,通过邮件或 webhook 发送消息,以及区分“全部宕机”和“此机器离线”的测试。
防护
针对单个区域或所有区域的安装、状态、开启、关闭、卸载和恢复功能,每次更改前都会先进行备份。
防护机制
ASGI 和 WSGI 中间件、一个 2 秒的“请稍候”页面(向用户发放 Cookie),以及每分钟一行日志。
运维手册
当网站变慢或宕机时该怎么做,如何解读流量洪峰,以及不要在 Cloudflare 控制台中开启哪些功能。
系统要求
- 运行 systemd 的 Linux 系统和 Python 3.10 或更新版本;无需通过 pip 安装任何内容。
- 对于防护功能和事件视图,网站需托管于 Cloudflare(任何套餐,包括免费版)并拥有 API 令牌。
- 一台不同于托管您网站的机器,以便在该机器宕机时通知您。
须知
- 紧急规则也会挑战那些在全新浏览器中输入您地址的人,这就是为什么它仅在流量洪峰期间开启。
- 已验证的机器人和自报身份的机器人永远不会被挑战,搜索引擎也永远不会被防护机制拒之门外。
- 防护功能使用免费版每个区域允许的五条自定义规则中的三条。
常见问题
我需要付费的 Cloudflare 套餐吗?
不需要。Night Watch 的所有功能在免费版上均可运行:三条规则、事件视图和自动切换。付费套餐只是在我们规则旁边提供更多规则槽位。
它会屏蔽 Google 或 AI 搜索爬虫吗?
不会。Cloudflare 已验证的机器人以及所有在用户代理中标明自身身份的机器人都会通过防护,防护机制也绝不会拒绝搜索引擎或链接预览。如果您想屏蔽 AI 爬虫,那是 Cloudflare 控制台中的一个独立选项。
我的网站不在 Cloudflare 上。它仍然有用吗?
监控和防护机制在任何地方都有效:监控可以打开任何 URL,防护机制可以保护任何 Python Web 应用。防护功能和事件视图需要 Cloudflare。
它和正常运行时间监控有什么区别?
正常运行时间监控会告诉你网站宕机了。Night Watch 也会告诉你,然后针对我们最常见的故障原因采取行动:它在 Cloudflare 边缘启用防护机制,在流量洪峰期间,这道闸门能确保你的应用继续为你想要服务的用户提供服务。
已更新: