Isang baha ng scraper sa Free plan ng Cloudflare: ano ang huminto dito, at ano ang iniwan naming naka-off

Ops

Isang umaga, tumigil ang pagbubukas ng isa sa aming mga site ng listing. Ipinakita ng Cloudflare sa mga bisita ang 524, kinuha ng origin ang dalawa hanggang anim na minuto bawat pahina, at walang nagbigay-alam sa amin sa loob ng humigit-kumulang sampung oras. Ang dahilan ay isang scraper na gumagamit ng residential proxies sa humigit-kumulang 225 requests bawat segundo.

Ang hugis ng baha

Ang bawat pahina ay na-render para sa bawat request, kaya ang bawat worker ay nag-queue ng daan-daang renders at umabot sa kanyang CPU limit.

Bakit hindi nakatulong ang per-address limits

Ang rate limit ay bumibilang ng requests bawat address. Sa isa hanggang tatlong requests mula sa libu-libong address, walang isang address na malapit sa limit. Ang pag-block sa mga bansa ay magba-block sa aming mga bisita. Ang hindi kayang gawin nang mura ng scraper ay ang kumilos na parang browser na nakapunta na sa site.

Sa Cloudflare's edge: tatlong libreng rules

Pinapayagan ng Free plan ang limang WAF custom rules bawat zone. Gumamit kami ng tatlo, lahat ay may managed challenge sa halip na block, kaya ang taong nahuli nang hindi sinasadya ay makakapindot para dumaan:

Pahintulutan ng lahat ng tatlo ang mga verified bot ng Cloudflare, ang mga user agent na nagpapangalan sa sarili bilang robots, ang aming mga address, ang mga path ng API at webhook, at ang mga file na hindi mga page. Dalawang araw ang nakalipas at patuloy pa rin ang baha: sa loob ng isang oras, hinamon ng fake-browser rule ang mahigit 10,000 request. Ang 10,000 event na ibinabalik ng Cloudflare bawat query ay galing sa 9,627 address, wala sa kanila ang may higit sa 4.

Sa origin: isang gate sa app

Ang headless na kalahati ay may buong browser headers, kaya hindi ito nahuhuli ng mga edge rules habang naka-off ang emergency rule. Sa mismong app, naglagay kami ng maliit na middleware sa harap ng page renderer:

Sa unang minuto nito, tinanggihan ng gate ang humigit-kumulang 6,700 fake browser at pinawalang-bahala ang humigit-kumulang 6,700 estranghero, habang pinaglingkuran ang mga estranghero ng humigit-kumulang 9 pages kada segundo. Bumaba sa zero ang mga mabagal na request, bumaba ang CPU ng mga workers mula sa kanilang limit patungong 12 hanggang 15 percent, at ang memorya nila mula 4 hanggang 5 GB bawat isa patungong 0.65 GB.

Ang mga iniwan naming naka-off

Ang takeaway

Madaling makita ang baha sa pamamagitan ng residential proxies base sa mga kulang dito: browser fetch headers, cookies at Referers. Hamunin ito sa edge, panatilihin ang mga estranghero sa loob ng kaya ng mga worker mong i-render, at tiyakin na may nakakaalam sa labas ng server kapag tumigil na ang pagbubukas ng page. Night Watch ang nagpa-package ng lahat ng tatlo: ang watch, ang mga rules na may automatic switch para sa emergency one, at ang gate para sa mga Python web apps.

Na-update: