【AWS】HTTPS+ELB リダイレクトループから抜け出す方法とは

AWS に慣れてきた感じ (がしてるだけ) のマルオです。

今回は リダイレクトループの罠にハマってしまった HTTPSリダイレクトのお話。


Webサーバーへのアクセスを全SSL化するため、Webサーバー (IIS) で HTTP → HTTPS にリダイレクトすることになりました。

しかし、IISで HTTP → HTTPS リダイレクトの設定をすると無限ループが発生します。

ブラウザにはこんなメッセージがでます

こんなことが起きてる (イメージ)

[ブラウザ:ポート80アクセス] → [ELB:ポート80で転送] → [Webサーバー:ポート443にリダイレクト] → [ブラウザ:ポート443でアクセス] → [ELB:ポート80で転送] → [Webサーバー:ポート443にリダイレクト]…繰り返す

----------

IISでは「URL Rewriteモジュール」を使ってリダイレクトルールを設定できるので、これをインストールするところから始めます。

----------
作業前の状態
  • 環境:OS「Windows Server 2012」/ Webサーバー「IIS 8」
  • HTTPでは疎通できている。
  • WebサーバーはELB (Elastic Load Balancer) を使用している。
  • ELBは「80 → 80」「443 → 80」へ転送されている。
やりたいこと
  • HTTP (80) のアクセスを HTTPS (443)へリダイレクトする。
----------

1. Web Platform Installer のダウンロードとインストール

まず、RDP接続を行い「URL Rewirteモジュール」のインストールに必要な「Microsoft Web Platform Installer 5.0」のダウンロードとインストールをします。(インストール済みの場合はスキップ)


「Web Platform Installer」を起動して、画面右上に虫眼鏡 (検索) ボックスから「URL」と入力して探すと「URL Rewrite 2.1」が見つかります。


「URL Rewrite 2.1」を Add して Install
I Accept を選択

インストール中

2. Rewrite ルールの追加

[Server Manager] [Tools] から [Internet Infomation Service (IIS) Manager] を選択します。

IIS Manager を開く

URL Writeが出てきました

[URL Rewrite]を開いてルールを追加します。画面右上 [Add Rules] から [Blank rule] を選択します。



設定するルールは以下のとおり。 (明記のない箇所はデフォルト値)

Name http to https rules (任意に名付ける)

Match URL
Requested URL: Matches the Pattern
Using: Regular Expressions
Pattern: ^(.*)$
Ignore case: ON

Conditions
Input: {HTTP_X_FORWARDED_PROTO}
Pattern: ^http$
Ignore case: ON

Action
Action type: Redirect
Action Properties: https://{SERVER_NAME}{URL}
Append query string: check
Redirect type: Permanet (301)


おわり

これで無事、リダイレクトループから脱出することができました。HTTP → HTTPSへのリダイレクト時に ELB を挟むときは要注意!という事がわかりまた1つ勉強になりました。

----------

以下おまけ。

いつも困るIEのセキュリティ設定について。今回は「Web Platform Installer」を素直にダウンロードできなかったのでご参考までにどうぞ。

「ダウンロードを許可しません」が出た場合は…

IEの [Internet options → Securityタブ] を開き、[Internet → Custom level] から[Download]を探して [Enable] に変更するとダウンロード可能になります。

Download を Enable に変更

このブログの人気の投稿

【AWS】IAMFullAccessを付与せずIAM Roleの作成とアタッチを行う方法

【AWS】EBSボリューム自動取得/削除 を Lambda で実行 (世代管理も)

【GCP】Compute EngineでVPNサーバーを立てるときの注意点