Night Watch
透過上線監控、Cloudflare 免費方案防護與機器人閘門,讓你的網站在爬蟲洪流中維持上線。
- Linux
- Python 3.10+
- Cloudflare Free plan
- ASGI or WSGI apps

功能說明
Night Watch 以訪客的方式開啟您執行的每個網站,每五分鐘一次,並在網站停止開啟及恢復時立即通知您。當網站因爬蟲氾濫而當機時,守護程序會啟用一條 Cloudflare 規則,在邊緣端阻擋氾濫流量,讓您的應用程式在期間持續服務使用者。
- 每五分鐘檢查每個網站。 涵蓋您 Cloudflare 帳號中的每個區域,以及您列出的任何頁面,可選配頁面必須包含的文字。網站當機時發送一則訊息,恢復時再發一則並附上當機時長,當機期間則發送提醒。透過郵件、聊天室 Webhook,或兩者並用。
- 免費方案上的防護盾。 三條 WAF 自訂規則:缺少真實 Chrome 必送標頭的 Chrome 使用者代理將受到驗證挑戰,來自爬蟲雲的頁面請求將受到驗證挑戰,而在氾濫期間,緊急規則會挑戰沒有 Cookie 且無來源連結的陌生訪客。
- 自動啟用。 當網站因過載而當機時,守護程序會啟用緊急規則並在警報中說明;網站恢復數小時後自動關閉。您手動啟用的防護盾則會保持開啟。
- 應用程式內部的閘門。 單一檔案、無相依套件,適用於 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 儀表板中不該開啟哪些設定。
系統需求
- Linux 搭配 systemd 和 Python 3.10 或更新版本;無需從 pip 安裝任何套件。
- 若要使用防護和事件檢視,網站需位於 Cloudflare(任何方案,包含免費方案)並具備 API 權杖。
- 一台不同於提供網站服務的機器,以便在該機器當機時通知您。
使用須知
- 緊急規則也會驗證在全新瀏覽器中輸入您網址的人,這就是為什麼它僅在流量洪峰期間開啟。
- 已驗證的機器人以及自我命名的機器人絕不會被驗證,搜尋引擎也絕不會被閘門擋下。
- 防護機制使用免費方案每區域允許的五個自訂規則中的三個。
From our field notes
常見問題
我需要付費的 Cloudflare 方案嗎?
不需要。Night Watch 的所有功能在免費方案上都能運作:三個規則、事件檢視和自動切換。付費方案只是在我們的規則旁提供更多規則槽位。
它會封鎖 Google 或 AI 搜尋爬蟲嗎?
不會。Cloudflare 已驗證的機器人以及所有在 user agent 中自我命名的機器人都能通過防護,且閘門絕不會擋下搜尋引擎或連結預覽。如果您想封鎖 AI 爬蟲,那是 Cloudflare 儀表板中的獨立選項。
我的網站不在 Cloudflare 上。它還有用嗎?
監控和閘門在任何地方都能運作:監控可開啟任何 URL,閘門可保護任何 Python 網頁應用程式。防護和事件檢視需要 Cloudflare。
這與正常運行監控有何不同?
正常運行監控只會告訴你網站已宕機。Night Watch 不僅會告訴你,還會針對我們最常見的原因採取行動:它在 Cloudflare 邊緣啟用防護盾,而在流量洪峰期間,閘門會確保你的應用程式繼續為目標用戶提供服務。
已更新: