カスタムエージェントレスポンスコードの使用

カスタムエージェントのレスポンスコードを使用すると、Web アプリケーションへのリクエストがブロックされたときに返される HTTP ステータスコードを指定できます。デフォルトでは、すべてのブロックアクションは 406 カスタムエージェントレスポンスコードを返します。このデフォルトの動作は次の方法で変更できます。

カスタムエージェントレスポンスコードは、トリガーされたルールに応じて、エッジで追加アクションを可能にします。たとえば、特定のカスタムエージェントレスポンスコードを使用して、CDN にリクエストを CAPTCHA にリダイレクトするよう指示することができます。Fastly CDN は、VCL でのカスタムエージェントレスポンスコードをサポートし、リクエストを他のページ (例: カスタムエラーページ) へリダイレクトします。

制約事項

カスタムエージェントレスポンスコードを扱う際には、以下の点に留意してください。

  • Essential プラットフォームでは、カスタムエージェントレスポンスコードは使用できません。

  • サポートされているカスタムエージェントレスポンスコードは301、302、および400 - 599です。

  • 各サイト (ワークスペース) は、いつでも最大 5個の固有のレスポンスコードを持つことができます。

  • カスタムエージェントレスポンスコードを使用するルールの総数に制限はありません。

  • カスタムエージェントレスポンスコードは、エージェントおよびモジュールの最小バージョンが必要です。カスタムエージェントレスポンスコードを使用するルールにより、サポートされていないモジュールバージョンでリクエストをブロックするよう指示された場合、そのリクエストはブロックされません

レスポンスコードの優先順位

ブロックアクションでは、ルールで異なるレスポンスコードが指定されていない限り、サイト (ワークスペース) のデフォルトのブロックレスポンスコードが使用されます。このルールの例は以下の通りです。

異なるカスタムエージェントレスポンスコードを持つルールが同一のリクエストをブロックする場合、最初に作成されたカスタムエージェントレスポンスコードが他の関連するカスタムエージェントレスポンスコードよりも優先されます。たとえば、あなたのサイト (ワークスペース) に次のルールがあるとします。

ルール条件Action作成日
EIPアドレス (クライアント) が 192.0.2.0 に等しいブロックし 500 を返す2022年12月1日
DIPアドレス (クライアント) が 192.0.2.0 に等しいブロックし 400 を返す2022年10月1日
CIPアドレス (クライアント) が 192.0.2.0 に等しいブロックし 404 を返す2022年8月1日
Bパスが /example/path と等しいブロックし 400 を返す2022年6月1日
Aパスが /example/redirect と等しいブロックし 301 を返す2022年4月1日

この例では、192.0.2.0 の IP アドレスを持つクライアントが、Web アプリケーションの /custom-limits ページにリクエストを送信します。リクエストがルール C、D、E の条件を満たすため、リクエストはブロックされます。ルール C はルール D と E よりも前に作成されましたが、ルール D からの 400 レスポンスコードが返されます。これは、関連するレスポンスコードの中で最も古いものであるためです。具体的には、400 レスポンスコードが6月1日にルール B に最初に追加され、404 および 500 レスポンスコードがそれぞれ8月1日と12月1日に作成されました。

カスタムエージェントレスポンスコードの選択

カスタムエージェントレスポンスコードはアップストリームシステムに返される可能性があるため、アップストリームシステムの動作を確実に理解してください。具体的には、カスタムエージェントレスポンスコードを選択する際には、以下の点に留意してください。

  • 一部の CDN は特定のレスポンスコードを自動的にキャッシュします。例えば、Fastly CDN は自動的に 301、302、404、および 410 レスポンスをキャッシュします。

  • 401 レスポンスコードを使用すると、クライアントブラウザにユーザー名とパスワードの入力を求めるプロンプトが表示される場合があります。

  • 400 や 403 などのレスポンスコードを使用すると、測定された「不正リクエスト」もしくは「禁止リクエスト」が人為的に増加する可能性があります。

  • 5xx レンジのレスポンスコードは、一般的にサーバー接続またはアプリケーションエラーに関連付けられています。

最小サポートバージョン

以下のエージェントおよびモジュールのバージョンは、カスタムエージェントレスポンスコードをサポートしています。

Name最小バージョン
エージェントすべてをサポート
Apache1.8.0+
Cloud Foundryすべてをサポート
Envoyすべてをサポート
Golang1.8.0+
HAProxy1.2.0+
Herokuすべてをサポート
IBM Cloudすべてをサポート
IIS2.2.0+
Java2.1.1+
.Net1.6.0+
.Net Core1.3.0+
Nginx1.4.0+
NGINX C バイナリ1.0.44+
Node.js1.6.1+

サポートされていないエージェントおよびモジュールは、カスタムエージェントレスポンスコードを使用するルールによってブロックされるべきリクエストを以下の方法で処理します。

エージェントモジュール結果
サポート対象サポート対象カスタムエージェントレスポンスコードでブロック
サポート対象サポート対象外ブロックされない
サポート対象外サポート対象デフォルトのレスポンスコード 406 でブロック
サポート対象外サポート対象外ブロックされない
サポート (リバースプロキシ)該当なしカスタムエージェントレスポンスコードでブロック
サポート対象外 (リバースプロキシ)該当なしデフォルトのレスポンスコード 406 でブロック

サイト (ワークスペース) のブロックレスポンスコードの変更

デフォルトでは、サイト (ワークスペース) のすべてのブロックアクションは カスタムエージェントレスポンスコード 406 を返します。このデフォルトの動作を変更するには、以下の手順を実行してください。

ヒント : 特定の条件下でサイト (ワークスペース) のデフォルトのブロック動作を上書きするには、リクエストルールもしくは高度なレート制限ルールを作成します。ルールにはブロックアクションが必要で、代替のブロックレスポンスコードを指定する必要があります。

  1. Next-Gen WAF control panel
  2. Fastly control panel
  1. Next-Gen WAF コンソールにログインします。
  2. 企業ナビゲーションバーから、[Corp Manage (企業管理)] メニューをクリックし、[Sites (サイト)] を選択します。

  3. 編集するサイトの名前をクリックします。

  4. [Agent Configurations (エージェントの設定)] をクリックします。

  5. [Blocking response code (ブロッキングレスポンスコード)] フィールドに、サイトのデフォルトのブロッキングレスポンスコードを入力します。すべてのブロックアクションはこのレスポンスコードを返しますが、ルールで異なるレスポンスコードが指定されている場合を除きます。サポートされているレスポンスコードは 301、302、400-599 です。

  6. (オプション) ブロックレスポンスコードフィールドに 301 もしくは 302 を入力した場合、リダイレクト URL フィールドにリダイレクト先の絶対 URL あるいは相対 URL を入力します。

  7. Update をクリックします。

リダイレクト・カスタム・エージェント・レスポンス・コードの使用

リダイレクト・カスタム・エージェント・レスポンス・コード (つまり 301 と 302) を使用すると、リダイレクト先の場所の絶対 URL もしくは相対 URL を指定できます。

リダイレクト URL は {{REQUESTID}} 変数の 1つのインスタンス (例 : https://www.example.com/blocked/?reqid={{REQUESTID}}) を渡すことができます。この変数が使用されると、クライアントがリダイレクト先へ送信される前に、関連するリクエストの ID に置き換えられます。

また、{{URL}} 変数を使用して既存のパスとクエリ文字列を維持することもできます (例 : https://www.example.com{{URL}})。VCL における req.url に似ています。