Citrix ADC

書き換え用の高度なポリシーポリシーのチュートリアル例

書き換え機能を使用すると、HTTP ヘッダーの任意の部分を変更できます。また、応答の場合は HTTP 本文を変更できます。この機能を使用すると、不要な HTTP ヘッダーの削除、内部 URL のマスキング、Web ページのリダイレクト、クエリやキーワードのリダイレクトなど、いくつかの便利なタスクを実行できます。

次の例では、まず書き換えアクションと書き換えポリシーを作成します。次に、ポリシーをグローバルにバインドします。

このドキュメントでは、次の詳細について説明します。

  • 外部 URL を内部 URL にリダイレクトする
  • クエリのリダイレクト
  • HTTP から HTTPS への書き換え
  • 不要なヘッダーの削除
  • Web サーバーのリダイレクトを減らす
  • サーバヘッダーのマスキング
  • プレーンテキストをURLエンコードされた文字列に変換し、反対の方法

コマンドおよび構文の説明の詳細については、 Rewrite コマンドリファレンスページを参照してください

外部 URL を内部 URL にリダイレクトする

この例では、外部 URL を内部 URL にリダイレクトする書き換えアクションと書き換えポリシーを作成する方法について説明します。書き換えを実行する act_external_to_internal というアクションを作成します。次に、pol_external_to_internal というポリシーを作成します。

CLI を使用して外部 URL を内部 URL にリダイレクトするには

  • 書き換えアクションを作成するには、コマンドプロンプトで次のように入力します。

add rewrite action act_external_to_internal REPLACE “http.req.hostname.server” “\”host_name_of_internal_Web_server\””

  • 書き換えポリシーを作成するには、Citrix ADCコマンドプロンプトで次のように入力します。

add rewrite policy pol_external_to_internal "http.req.hostname.server.eq(\"host_name_of_external_Web_server\")" act_external_to_internal

  • ポリシーをグローバルにバインドします。

構成ユーティリティを使用して外部 URL を内部 URL にリダイレクトするには

  1. AppExpert > 書き換え > アクションに移動します
  2. 詳細ペインで、[Add] をクリックします。
  3. [ 書き換えアクションの作成 ] ダイアログボックスで、act_external_to_internal という名前を入力します。
  4. HTTP サーバのホスト名を内部サーバ名に置き換えるには、[タイプ(Type)] リストボックスから [ 置換 (Replace)] を選択します。
  5. ヘッダー名フィールドに「 Host」と入力します。
  6. 置換テキストフィールドの文字列式に、Web サーバーの内部ホスト名を入力します。
  7. [Create] をクリックしてから、[Close] をクリックします。
  8. ナビゲーションペインで、[ Policies] をクリックします。
  9. 詳細ペインで、[Add] をクリックします。
  10. 「名前」フィールドに「pol_external_to_internal」と入力します。このポリシーは、Web サーバーへの接続を検出します。
  11. [アクション] ドロップダウンメニューで、アクション act_external_to_internal を選択します。
  12. エクスプレッションエディタで、次のエクスプレッションを作成します。
HTTP.REQ.HOSTNAME.SERVER.EQ("www.example.com")
<!--NeedCopy-->
  1. 新しいポリシーをグローバルにバインドします。

クエリのリダイレクト

この例では、クエリを適切な URL にリダイレクトする書き換えアクションと書き換えポリシーを作成する方法について説明します。この例では、リクエストに www.example.com に設定された Host ヘッダーと、 文字列 /query.cgi? を持つ GET メソッドが含まれていることを前提としています。server=5。リダイレクトは、ホストヘッダーからドメイン名を、クエリ文字列から番号を抽出し、ユーザーのクエリをサーバー Web5.example.com にリダイレクトします。Web5.example.comでは、残りのユーザーのクエリが処理されます。

注:

次のコマンドは複数の行に表示されますが、改行せずに 1 行で入力する必要があります。

CLI を使用してクエリを適切な URL にリダイレクトするには

  • HTTP サーバのホスト名を内部サーバ名に置き換える act_redirect_query という名前の書き換えアクションを作成するには、次のように入力します。

add rewrite action act_redirect_query REPLACE http.req.header("Host").before_str(".example.com") '"Web" + http.req.url.query.value("server")'

  • pol_redirect_queryという名前の書き換えポリシーを作成するには、Citrix ADCコマンドプロンプトで次のコマンドを入力します。このポリシーは、クエリ文字列を含む Web サーバーへの接続を検出します。このポリシーは、クエリ文字列を含まない接続には適用しないでください。

add rewrite policy pol_redirect_query 'http.req.header("Host").eq(www.example.com) && http.req.url.contains("?")' act_redirect_query

  • 新しいポリシーをグローバルにバインドします。

この書き換えポリシーは、非常に特殊なものであり、他の書き換えポリシーの前に実行する必要があるため、高い優先度を割り当てることをお勧めします。優先度 1 を割り当てると、最初に評価されます。

HTTP から HTTPS への書き換え

この例では、文字列「HTTP」で始まるすべての URL を検索し、その文字列を「https」に置き換えるように Web サーバーレスポンスを書き換える方法について説明します。サーバーを HTTP から HTTPS に移動した後に Web ページを更新する必要がないようにするために使用できます。

CLI を使用して HTTP URL を HTTPS にリダイレクトするには

  • 文字列「HTTP」のすべてのインスタンスを文字列「https」に置き換える act_replace_http_with_https という名前の書き換えアクションを作成するには、次のコマンドを入力します。

add rewrite action act_replace_http_with_https replace_all 'http.res.body(100)' '"https"' -search http

  • Web サーバへの接続を検出する pol_replace_http_with_https という名前の書き換えポリシーを作成するには、次のコマンドを入力します。

add rewrite policy pol_replace_http_with_https TRUE act_replace_http_with_https NOREWRITE

  • 新しいポリシーをグローバルにバインドします。

この書き換え操作のトラブルシューティングについては、「ケーススタディ:HTTP リンクを HTTPS に変換するための書き換えポリシーが機能しない」を参照してください。

不要なヘッダーの削除

この例では、書き換えポリシーを使用して不要なヘッダーを削除する方法について説明します。具体的には、次のヘッダーを削除する例を示します。

  • エンコーディングヘッダーを受け入れます。HTTP 応答から Accept Encoding ヘッダーを削除すると、応答の圧縮が防止されます。
  • コンテンツの場所ヘッダー。HTTP レスポンスから Content Location ヘッダーを削除すると、サーバーがセキュリティ侵害を許容する可能性のある情報をハッカーに提供することを防ぎます。

HTTP 応答からヘッダーを削除するには、書き換えアクションと書き換えポリシーを作成し、ポリシーをグローバルにバインドします。

CLI を使用して適切な書き換えアクションを作成するには

コマンドプロンプトで、次のいずれかのコマンドを入力して、Accept Encoding ヘッダーを削除して応答の圧縮を防止するか、Content Location ヘッダーを削除します。

  • add rewrite action "act_remove-ae" delete_http_header "Accept-Encoding"
  • add rewrite action "act_remove-cl" delete_http_header "Content-Location"

CLI を使用して適切な書き換えポリシーを作成するには

コマンドプロンプトで、次のいずれかのコマンドを入力して、Accept Encoding ヘッダーまたは Content Location ヘッダーを削除します。

  • add rewrite policy "pol_remove-ae" true "act_remove-ae"
  • add rewrite policy "pol_remove-cl" true "act_remove-cl"

CLI を使用してポリシーをグローバルにバインドするには

コマンドプロンプトで、必要に応じて次のコマンドのいずれかを入力し、作成したポリシーをグローバルにバインドします。

  • bind rewrite global pol_remove_ae 100
  • bind rewrite global pol_remove_cl 200

Web サーバーのリダイレクトを減らす

この例では、書き換えポリシーを使用して、ホームページへの接続と、末尾がスラッシュ (/) で終わる他の URL をサーバーの既定のインデックスページに変更し、リダイレクトを防止し、サーバーの負荷を軽減する方法について説明します。

CLI を使用してデフォルトのホームページを含めるようにディレクトリレベルの HTTP 要求を変更するには

  • スラッシュで終わる URL を変更して、デフォルトのホームページ index.html を含むように変更する action-default-homepage という名前の書き換えアクションを作成するには、次のように入力します。

add rewrite action "action-default-homepage" replace http.req.url.path "\"/index.html\""

  • ホームページへの接続を検出して新しいアクションを適用する policy-default-homepage という名前の書き換えポリシーを作成するには、次のように入力します。

add rewrite policy "policy-default-homepage" q\#http.req.url.path.EQ("/") "action-default-homepage"\#

  • 新しいポリシーをグローバルにバインドして有効にします。

サーバヘッダーのマスキング

この例では、書き換えポリシーを使用して、Web サーバーからの HTTP 応答の Server ヘッダー内の情報をマスクする方法について説明します。このヘッダーには、ハッカーがウェブサイトを侵害するために使用できる情報が含まれています。ヘッダーをマスクしても、熟練したハッカーがサーバーに関する情報を見つけることを妨げることはありませんが、Webサーバーのハッキングが難しくなり、ハッカーが保護されていないターゲットを選択するように促します。

CLI からの応答で Server ヘッダーをマスクするには

  1. Server ヘッダーの内容を無意味な文字列に置き換える act_mask-server という名前の書き換えアクションを作成するには、次のように入力します。

add rewrite action "act_mask-server" replace "http.RES.HEADER(\"Server\")" "\"Web Server 1.0\""

  1. すべての接続を検出する pol_mask-server という名前の書き換えポリシーを作成するには、次のように入力します。

add rewrite policy "pol_mask-server" true "act_mask-server"

  1. 新しいポリシーをグローバルにバインドして有効にします。

プレーンテキストをURLエンコードされた文字列に変換する方法と反対の方法

次の式は、プレーンテキストを URL エンコードされた文字列に変換し、反対の方法で変換します。

  1. URL_RESERVED_CHARS_SAFE(URLエンコードする文字列)。

例:

("abc def&123").URL_RESERVED_CHARS_SAFE
Output will be
“abc%20def%26123” which is url encoded.
<!--NeedCopy-->
  1. SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE. (URL を文字列にエンコード)

例:

("abc%20def%26123").SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE
Output will be
“abc def&123”
<!--NeedCopy-->
書き換え用の高度なポリシーポリシーのチュートリアル例