同じゾーン上の Workers サブリクエストを、Cloudflare が別リクエストとしてカウントすることがあります。その結果、レート制限ルールが想定より早く発動します。この動作は、レート制限ルールで Also apply rate limiting to cached assets がオフ(false)のときに発生します。
この動作を防ぐには、cf.worker.upstream_zone フィールドを使い、同じゾーンからの Workers サブリクエストをレート制限ルールから除外します。たとえば、次の部分式を レート制限ルールの式 に追加できます。
and (cf.worker.upstream_zone == "" or cf.worker.upstream_zone != "<YOUR_ZONE>")最初の条件(空文字列の判定)は訪問者からの直接リクエストに一致し、2 番目の条件は自ゾーン以外から来たサブリクエストに一致します。これにより、同じゾーンからのサブリクエストをレート制限ルールから除外できます。
Origin Rules で Host ヘッダーを書き換えており、レート制限ルールの式またはカウント特性に http.host が含まれている場合、ルールは受信リクエストに一致してもカウンターが増えないことがあります。
これは、レート制限ルールの式が 2 つのフェーズで評価されるためです。
- リクエストフェーズ(ルールの照合): 式は元のリクエストに対して評価されます。このとき
http.hostには元のホスト名が入っています。ルールは想定どおり一致します。 - レスポンスフェーズ(カウンターの加算): ルールが カウント式 を使う場合、または Also apply rate limiting to cached assets がオフの場合、カウンターの加算はレスポンスの後に行われます。この時点では Origin Rules がすでに
Hostヘッダーを新しい値に書き換えているため、元のホスト名を含む式は一致しなくなります。
その結果、ルールはリクエストに一致してもカウンターが増えず、レート制限が適用されません。
次のいずれかで対処します。
- カウント式から
http.host条件を外し、カウンターの範囲はhttp.request.uri.pathなど別のフィールドで絞ります。 - カウント式を、元のホスト名ではなく書き換え後のホスト名を使うように更新します。
or条件で、元のホスト名と書き換え後のホスト名の両方をカウント式に含めます。
Cloudflare のレート制限ルールは、インフラが高負荷のとき フェイルオープン(ブロックせずにリクエストを通す)で動作します。基盤インフラの負荷が高い場合、正当なトラフィックをブロックする代わりに、影響を受けるリクエストについてレートカウンターの更新とレート制限の適用をスキップすることがあります。
フェイルオープンの発生を示す、お客様向けのシグナルはありません。レート制限ルールが捕捉すべきトラフィックをブロックしていない(偽陰性)かつルール設定が正しい場合、影響を受けたデータセンターのインフラ負荷が要因である可能性があります。
データセンター単位のカウント: レート制限のカウンターは Cloudflare データセンターごとに保持されます。多数のデータセンターに分散したトラフィックでは、合計レートがしきい値を超えていても、データセンター単位のレートがしきい値未満のままになることがあります。グローバルに分散するトラフィックでは、しきい値を決める際にこの点を考慮してください。