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

NO IMAGE

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」のダウンロードとインストールをします。(インストール済みの場合はスキップ)
リンク:Microsoft Web Platform Installer
「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 に変更

タイトル

本文