【BIG-IP】HTTPリダイレクトのホストヘッダを変更するRedirectRewriteの動作と設定

BIG-IPでSSLオフロードを実施した際、配下のリアルサーバが、httpリダイレクトを実施している環境下では、BIG-IPはそのまま「http」の通信としてクライアントに通知してしまい、通信ができないなどの不具合を起こしてしまいます。

このため、BIG-IPのSSLオフロード環境下では、リアルサーバからのhttpリダイレクトに対して、ロケーションヘッダ内のURLを「HTTP://」から「HTTPS://」へ書き換える機能である「RedirectRewrite」の機能が必要となります。

以下、参考資料となります。
http://www.f5networks.co.jp/shared/pdf/BIG-IP_TB_HTTP_redirect.pdf

【BIG-IP】リアルサーバーからのリダイレクトにたいし、「HTTP://」⇒「HTTPS://」へスキームを変更する設定

BIG-IP環境下のリアルサーバーリダイレクトされる、「http://xxxxxx」のURLを「https://xxxxxx」にRewriteする設定において、GUI画面で簡単に設定することが出来ます。

設定方法は、以下となります。

  1. BIG-IPにログイン
  2. Local Traffic⇒Profiles⇒Services⇒HTTPで「Create」
  3. 「Name」を設定し、[settings]より、「Redirect Rewrite 」にチェックをいれ、「All」を選択
  4. 「Finishd」
  5. Local Traffic⇒Virtual Server⇒対象のVIPを選択
  6. 「Configuration」⇒「HTTP Profile」より上記でProfileで作成したProfileを選択
  7. 「Update」で完了

特定のURLのみを「Redirect Rewrite」する設定(iRule)

上記、GUIの「Redirect Rewrite」で簡単に設定はできますが、URLを限定したRewiriteの設定ができません。

リアルサーバからリダイレクトされたURLを限定して以下のように変更させたい方もいるはず。

  • http://test.local ⇒ https://test.local ←httpsに変更する
  • http://abc.local ⇒ http://abc.local ←そのままクライアントにリダイレクト

特定のURLのみを「Redirect Rewrite」する「iRule」の設定

上記のような動作とさせたいため以下iRuleを設定しました。

以下はリアルサーバからのリダイレクトのへっだーが「http://test.local」の場合、スキーム(http)をhttpsへ変更する設定となります。

iRuleの作成は以下となります。

  1. 「Local Traffic」⇒「iRule」⇒「iRule List」⇒「Create」
  2. 名前を付けて以下コードを記載し、「Finished」
--------------------------------
 
when HTTP_RESPONSE {
    if { [HTTP::is_redirect] }{
     if { [HTTP::header Location] starts_with "http://test.local" }{
      HTTP::header replace Location "[string map {"http://" "https://"} [HTTP::header Location]]"
      }
   }
}
 
--------------------------------

これをVIPへ適用しますが、対象のVIPで「Resorces」タブから「iRule」より、上記で作成したiRuleを適用させましょう。

設定はこれだけで完了です。実際に動いているのかログで確かめたい場合は、以下7行目の設定を追記しましょう。
ちなみに、この7行目は本番環境に使わないようにしましょう。

ログがたまりすぎてBIG-IPが重くなってしまいます。

--------------------------------
 
when HTTP_RESPONSE {
    if { [HTTP::is_redirect] }{
     if { [HTTP::header Location] starts_with "http://test.local" }{
      HTTP::header replace Location "[string map {"http://" "https://"} [HTTP::header Location]]"
      log local0. "HTTP Location header : [HTTP::header Location]"
      }
   }
}
 
--------------------------------

まとめ

実際にバーチャル環境で動作することを確認しました。
ぜひ、上記のような環境下で「Redirect Rewrite」を利用したいかたはぜひ参考にしてください。

それでは!




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!