INTEGRITY Dokumentace

Řešení problémů s pravidly rate limitingu

Některé subrequesty Workers se počítají jako samostatné požadavky

Cloudflare může podpožadavky Workers ve stejné zóně počítat jako samostatné požadavky, což způsobí, že se pravidlo rate limitingu spustí dříve, než čekáte. K tomuto chování dochází, když je pravidlo rate limitingu nakonfigurováno s Also apply rate limiting to cached assets nastaveno na false.

Abyste tomuto chování zabránili, musíte ze svého pravidla rate limitingu vyloučit subrequesty Workers pocházející ze stejné zóny pomocí cf.worker.upstream_zone (pole). Například můžete následující podvýraz přidat do pole výraz pravidla rate limitingu:

and (cf.worker.upstream_zone == "" or cf.worker.upstream_zone != "<YOUR_ZONE>")

První podmínka (test prázdného řetězce) zachytí přímé požadavky návštěvníků, zatímco druhá podmínka zachytí subpožadavky nepocházející z vaší zóny, čímž se z pravidla rate limitingu fakticky vyloučí subpožadavky ze stejné zóny.

Pravidla rate limitingu s podmínkami na hostitele a Origin Rules

Pokud používáte Origin Rules k přepsání Host hlavičku a vaše pravidlo rate limitingu zahrnuje http.host ve svém výrazu nebo počítacích charakteristikách, pravidlo může odpovídat příchozím požadavkům, ale nemusí inkrementovat svůj čítač.

K tomu dochází, protože výraz pravidla rate limitingu se vyhodnocuje ve dvou fázích:

  1. Fáze požadavku (porovnávání pravidla): Výraz se vyhodnocuje vůči původnímu požadavku, kde http.host obsahuje původní hostname. Pravidlo odpovídá podle očekávání.
  2. Fáze odpovědi (navýšení čítače): Pokud pravidlo používá výraz pro počítání nebo má Also apply rate limiting to cached assets vypnuto, k navýšení čítače dochází po odpovědi. V tomto okamžiku už Origin Rules přepsala Host hlavičku na novou hodnotu, takže výraz obsahující původní hostname již neodpovídá.

Výsledkem je, že pravidlo požadavkům odpovídá, ale nikdy nenavyšuje čítač, a rate limit se tak nikdy nevynutí.

Řešení

K nápravě proveďte jedno z následujícího:

Chování fail-open u rate limitingu

Pravidla rate limitingu Cloudflare fungují v režim fail-open (propouštění požadavků namísto jejich blokování) při přetížení infrastruktury. Když je podkladová infrastruktura vysoce zatížena, Cloudflare může u dotčených požadavků přeskočit aktualizace čítačů a vynucování rate limitů, místo aby blokoval legitimní provoz.

Události typu fail-open nemají žádný signál viditelný pro zákazníka. Pokud pravidlo rate limitingu neblokuje provoz, který by mělo zachytávat (falešně negativní detekce), a konfigurace pravidla je správná, může být příčinou zatížení infrastruktury v dotčeném datovém centru.

Počítání podle datového centra: Čítače rate limitingu jsou udržovány pro každé datové centrum Cloudflare zvlášť. Provoz rozložený mezi mnoho datových center může udržet frekvenci v jednotlivých datových centrech pod prahem, i když souhrnná frekvence práh překračuje. Zohledněte to při nastavování prahů pro globálně distribuovaný provoz.