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 に変更 |