レスポンダーポリシーを持つ gRPC

最終公開日 : Sep 25, 2026
レスポンダー付きの gRPC ポリシー構成では、Citrix ADCアプライアンスがHTTP/2プロトコルを介してgRPC要求に対して異なる応答を提供する方法について説明します。ユーザーがWebサイトのホームページを要求するときは、各ユーザーの場所やユーザーが使用しているブラウザーに応じて、異なるホームページを提供することをお勧めします。
次の図は、相互作用するコンポーネントを示しています。
レスポンダーポリシーを持つ gRPC
  1. アプライアンスでレスポンダ機能を有効にします。
  2. カスタム応答を生成する、要求を別のWebページにリダイレクトする、または接続をリセットするようにレスポンダーアクションを構成します。
  3. アクションを実行する必要があるgRPC要求(トラフィック)を決定するためのレスポンダーポリシーを構成します。
  4. レスポンダーポリシーを負荷分散仮想サーバーにバインドして、トラフィックがポリシー式に一致するかどうかを調べます。
  5. レスポンダーポリシーを使用すると、gRPC ステータスコードに基づいて以下を実行できます。
Related information

CLI を使用して gRPC コール終了をレスポンダポリシーで設定します

レスポンダポリシーを使用してgRPCコールの終了を設定するには、次の手順を実行する必要があります。
  1. レスポンダー機能を有効にする
  2. レスポンダーアクションを追加する
  3. レスポンダーポリシーを追加し、レスポンダーアクションを関連付ける
  4. レスポンダーポリシーを負荷分散仮想サーバーにバインドする

レスポンダー機能を有効にする

レスポンダー機能を使用するには、最初にそれを有効にする必要があります。
コマンドプロンプトで入力します。
enable ns responder

レスポンダーアクションを追加する

この機能を有効にした後、バックエンドサーバーから返されたステータスコードに基づいてgRPC応答を処理するためのレスポンダーアクションを構成する必要があります。
コマンドプロンプトで入力します。
add responder action <name> <type>
例:
add responder action grpc-act respondwith "HTTP/1.1 200 OK\r\nServer: NS-Responder\r\nContent-Type:application/grpc\r\ngrpc-status: 12\r\ngrpc-message: Not Implemented\r\n\r\n" + "Method: " + HTTP.REQ.URL+ "is not implemented."

レスポンダーポリシーの追加

レスポンダーのアクションを構成したら、次にレスポンダーポリシーを構成して、Citrix ADCアプライアンスが応答するgRPC リクエストを選択する必要があります。
コマンドプロンプトで入力します。
add responder policy <name> <expression> <action> [<undefaction>]-appFlowaction <actionName> 例:
add responder policy grpc-resp-pol1 HTTP.REQ.URL.NE(“/helloworld.Greeter/SayHello”) grpc-act

レスポンダーポリシーを負荷分散仮想サーバーにバインドする

ポリシーを有効にするには、gRPCサービスを使用してポリシーを負荷分散仮想サーバーにバインドする必要があります。
コマンドプロンプトで入力します。
bind responder global <policyName> <priority> [<gotoPriorityExpression> [-type <type>] [-invoke (<labelType> <labelName>)]
例:
bind lb vserver lb-grpc svc-grpc -policyName grpc-resp-pol1 –priority 100
レスポンダーポリシーの詳細については、「 レスポンダーポリシー 」トピックを参照してください。

gRPC プロトコルバッファフィールドを照合するためのポリシー式

Citrix ADCアプライアンスは、gRPC構成で次のポリシー式をサポートしています。
  • **gRPC プロトコルバッファフィールドアクセス。**任意の gRPC API 呼び出しは、メッセージフィールド番号と新しいポリシー式と一致します。PI 構成では、一致は「フィールド番号」と「API パス」のみを使用して行われます。
  • **gRPC ヘッダーフィルタリング。**gRPC の「HttpProfile」パラメータは、gRPC 解析のデフォルトの動作(gRPC ポリシー式を含む)を調整するために使用されます。gRPC ポリシー式には、次のパラメータが適用されます。
    • **gRPCLengthDelimitation。**これはデフォルトで有効になっており、プロトコルバッファに長さ区切りのメッセージが表示されることを想定しています。
    • **grpCholdLimit。**デフォルト値は131072です。これは、プロトコルバッファメッセージの最大サイズ(バイト単位)です。また、文字列の最大長と最大 'byte' フィールド長でもあります。

CLI を使用して gRPC アドバンスポリシー式を設定します

コマンドプロンプトで入力します。
set ns httpProfile &lt;name> -http2 ( ENABLED | DISABLED ) -gRPCLengthDelimitation ( ENABLED | DISABLED ) -gRPCHoldLimit &lt;int>
例:
set ns httpProfile http2gRPC -http2 ENABLED -gRPCLengthDelimitation ENABLED -gRPCHoldLimit 131072

GUI を使用して gRPC ヘッダーフィルタリングパラメータを設定する

  1. System > Profilesに移動してHTTP Profilesをクリックします。
  2. \[ HTTP プロファイルの作成 \] ページで、\[ HTTP/3 \] セクションまでスクロールダウンし、\[ gRPC の長さの区切り\] を選択します。
    gRPC の長さの区切り
次のポリシー式の例は、メッセージ 5、サブメッセージ 4、およびフィールド 3 の値を示しています。これは 2 に等しい 32 ビットの int です。
http.req.body(1000).grpc.message(5).message(4).int32(3).eq(2)
gRPC プロトコルバッファメッセージフィールドを番号で照合するために、次のポリシー式が追加されます。
  • message
  • ダブル
  • フロート
  • int32
  • int64
  • uint32
  • uint64
  • sint64
  • sint32
  • fixed32
  • fixed64
  • sfixed32
  • sfixed64
  • bool
  • string
  • 列挙型
  • bytes

API パスマッチング

API パスマッチングは、複数の API が使用されている場合に、正しい gRPC API 呼び出しを照合するために使用されます。API パスと一致します。これは HTTP リクエストの ': path' 疑似ヘッダーにあります。
例:
http.req.header(":path").eq("acme.inventory.v1/ListBooks")