Citrix ADC

書き換えのデフォルト構文ポリシーのチュートリアルの例

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

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

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

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

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

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

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

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

クエリのリダイレクト

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

注:

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

コマンドラインを使用してクエリを適切な URL にリダイレクトするには

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

add rewrite action act_redirect_query REPLACE q#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 q#http.req.header("Host").eq("www.example.com") && http.req.url.contains("?")' act_redirect_query#

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

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

HTTP から HTTPS への書き換え

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

コマンドラインインターフェイスを使用して 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"' -pattern http

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

add rewrite policy pol_replace_http_with_https TRUE act_replace_http_with_https NOREWRITE

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

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

不要なヘッダーの削除

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

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

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

コマンドラインインターフェイスを使用して適切な書き換えアクションを作成するには

コマンドプロンプトで、次のいずれかのコマンドを入力して、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"

コマンドラインインターフェイスを使用して適切な書き換えポリシーを作成するには

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

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

コマンドラインインターフェイスを使用してポリシーをグローバルにバインドするには

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

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

Web サーバーのリダイレクトの削減

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

コマンドラインを使用してディレクトリレベルの HTTP 要求を変更して、既定のホームページを含めるには

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

add rewrite action "action-default-homepage" replace q\#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 サイトを侵害するために使用できる情報が含まれています。ヘッダーをマスキングしても、熟練したハッカーがサーバーに関する情報を見つけるのを防ぐことはできませんが、Webサーバーをハッキングすることは難しくなり、ハッカーがあまり保護されていないターゲットを選択するよう促します。

コマンドラインからの応答でサーバーヘッダーをマスクするには

  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.
  1. SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE. (URL ENCODED to string)

例:

("abc%20def%26123").SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE
Output will be
“abc def&123”

書き換えのデフォルト構文ポリシーのチュートリアルの例