Citrix ADC

HTTP コールアウトの再帰の回避

Citrix ADCアプライアンスはHTTPコールアウト要求の有効性をチェックしませんが、要求をHTTPコールアウトエージェントに送信する前に一度解析します。この解析により、アプライアンスはコールアウト要求を他の着信要求として処理できます。これにより、コールアウト要求に対して機能するように、いくつかの便利なCitrix ADC機能(統合キャッシュなど)を設定できます。

ただし、この解析中に HTTP コールアウト要求は同じポリシーを選択できるため、再帰的にそれ自体を呼び出すことができます。アプライアンスは再帰呼び出しを検出し、未定義(UNDEF)状態を生成します。ただし、再帰呼び出しにより、ポリシーと HTTP コールアウト選択カウンタは、それぞれ 1 カウントではなく、それぞれ 2 カウントずつ増加します。

コールアウトがコールアウト自体を呼び出さないようにするには、HTTP コールアウトリクエストの一意な特性を少なくとも 1 つ指定し、コールアウトを呼び出すポリシールールによってこの特性を持つすべてのリクエストが処理されないようにする必要があります。そのためには、ポリシールールに別の既定の構文式を含めます。式は、コールアウトSYS.HTTP_CALLOUT(<name>) 式が評価される前に評価されるように、式の前に指定する必要があります。例:

<Expression that prevents callout recursion> OR SYS.HTTP_CALLOUT(<name>)

この方法でポリシールールを構成すると、アプライアンスが要求を生成して解析すると、複合ルールが FALSE と評価され、コールアウトが 2 回目に生成されず、選択カウンタが正しくインクリメントされます。

HTTP コールアウト要求に一意の特性を割り当てる方法の 1 つは、コールアウトを設定するときに一意のカスタム HTTP ヘッダーを含めることです。以下は、「myCalloutと呼ばれるHTTPコールアウトの例です。コールアウトは、クライアントの IP アドレスがブラックリストに登録された IP アドレスのデータベースに存在するかどうかをチェックする HTTP 要求を生成します。吹き出しには「Request」というカスタムヘッダーが含まれており、この値は「Callout Request」の値に設定されます。グローバルにバインドされたレスポンダーポリシー「Pol1」は HTTP コールアウトを呼び出しますが、Request ヘッダーがこの値に設定されているすべてのリクエストを除外するため、myCallout の 2 回目の呼び出しが防止されます。2 番目の呼び出しを防ぐ式は HTTP.REQ.HEADER (「リクエスト」) .EQ (「コールアウト要求」) です。

:

> add policy httpCallout myCallout
 Done

> set policy httpCallout myCallout -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr ""10.102.3.95"" -urlStemExpr ""/cgi-bin/check_clnt_from_database.pl"" -headers Request("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(100)"
Done

> add responder policy Pol1 "HTTP.REQ.HEADER("Request").EQ("Callout Request").NOT && SYS.HTTP_CALLOUT(myCallout).CONTAINS("IP Matched")" RESET
Done

> bind responder global Pol1 100 END -type OVERRIDE
Done

注: リクエストURLにHTTPコールアウト用に設定されたstem式が含まれているかどうかを確認する式を設定することもできます。ソリューションを実装するには、HTTP コールアウトエージェントが HTTP コールアウトにのみ応答し、アプライアンスを経由する他の要求には応答しないようにします。HTTP コールアウトエージェントが他のクライアント要求を処理するアプリケーションまたは Web サーバーである場合、このような式により、アプライアンスはこれらのクライアント要求を処理できなくなります。代わりに、前述のように一意のカスタムヘッダーを使用します。

HTTP コールアウトの再帰の回避