今回の記事では、IIS 10でhttpのURLで接続してきたリクエストをhttpsにリダイレクトするIISの設定手順を紹介します。
尚、IISでリダイレクトさせる設定方法は幾つかありますが、やり方によっては、代表的なウェブサーバーのApacheなどと比べても非常に手順が面倒になる場合もあります。
そこで今回の記事ではMicrosoftが提供している「URL Rewrite Module 2.1」をインストールして使用します。
個人的には、この「URL Rewrite Module」を使用したリダイレクト設定が一番簡単で、且つ拡張性も高いと思います。
当記事の動作確認環境
今回の記事では以下の環境で動作を確認しております。
OS
Windows Server 2019 Standard
バージョン 1809(OSビルド 17763.2300)
IIS
バージョン 10.0.17763.1
IIS 10でhttpsにリダイレクトする設定手順
当項では、Windows Server 2019のIISに対して、httpのURLにアクセスしてきたリクエストをhttpsのURLにリダイレクトする設定手順を紹介します。
尚、前提として、現時点でhttpとhttpsの両URLでアクセス可能な状態になっている必要があります。
「URL Rewrite Module 2.1」のダウンロード
今回使用する「URL Rewrite Module」は元々IISには組み込まれておらず、サーバーマネージャーの「役割と機能の追加」からも追加できない機能です。
Microsoftのサイトからインストーラーをダウンロードしてインストールする必要があります。
この「URL Rewrite Module」をインストールすることで、IISマネージャー内に「URL書き換え機能」の設定画面が追加されます。
まずは、Microsoftが提供している「URL Rewrite Module 2.1」のページからインストーラーをダウンロードします。
通常は64bitアーキテクチャのWindows Serverを使用していると思うので、Japanese(日本語版)の「x64 installer」をダウンロードしてください。
「URL Rewrite Module 2.1」をサーバーにインストール
対象のWindows Serverに対して、「URL Rewrite Module 2.1」をインストールします。
インストール処理は、利用規約に同意すること以外に入力を求められることもなく、すぐに完了します。
IISマネージャーの起動
「URL Rewrite Module」のインストールが完了した後、IISマネージャーを起動します。
もし、IISマネージャーが起動したまま「URL Rewrite Module」をインストールした場合は、いったんIISマネージャーを終了させないと、IISマネージャーのメニュー画面に「URL Rewrite Module」の機能が表示されません。
よって、必要によっていったんIISマネージャーを終了して再度起動してください。
IISマネージャーのホーム画面に「URL 書き換え」アイコンが追加されています。
「URL 書き換え」画面に遷移
「URL 書き換え」画面に進むと、以下の画面が表示されます。
この画面の右上の「規則の追加」を押下します。
「規則テンプレートの選択」画面
規則テンプレートの選択画面が表示されます。
「空の規則」を選択して「OK」を押下します。
「条件の追加」画面
2022年8月追記
以前は「空の規則」選択後に当画面に遷移しましたが、現在は次項の「受信規則の編集」画面に遷移します。
「条件の追加」画面は「受信規則の編集」画面内の「条件」枠内の「追加」ボタンから遷移します。
ここでは、URLを書き変える条件を設定します。
設定値は以下の画面内容と同じにしてください。
条件の入力:{HTTPS}
パターンに一致する
パターン:^OFF$
設定値について簡単に解説します。
「条件の入力」で指定した {HTTPS} と、「パターン」の ^OFF$ で、”httpsではない” といった判定になり、^OFF$ が「パターンに一致する」のが書き換えの条件として扱われます。
入力後は「OK」を押下します。
「受信規則の編集」画面
「受信規則の編集」画面に進みます。
ここでは、まず以下の設定を入力、選択します。
名前:受信規則の任意の値
要求されたURL:パターンに一致する
使用:正規表現
パターン:(.*)
「名前」はそのURL書き換えの受信規則の名前を任意の値で指定します。
わかりやすい名前を指定してください。
「URLの一致」枠内の「要求されたURL」では「パターンに一致する」。
「使用」では、「正規表現」。
「パターン」では (.*) を指定します。
この「パターン」は正規表現ではすべての文字列を指します。
画面を下に移動させて、「アクション」枠のアクション設定を指定します。
アクションの種類:リダイレクト
リダイレクトURL:https://{HTTP_HOST}{REQUEST_URI}
リダイレクトの種類:永続的(301)
上記の「アクションのプロパティ」の「リダイレクトURL」の設定値では、{HTTP_HOST}が、URLにおけるFQDNのことを指し、{REQUEST_URI}はURLのFQDNより後ろの文字列を指します。
よって、URLの先頭を https:// に書き換えつつ、それ以降のURLで使われている文字列はリクエストされたURLをそのまま使用するといった意味合いの設定になります。
その後、画面右上の「操作」枠内にある「適用」を押下して、設定内容を反映します。
全ての設定が完了したら、IISを再起動します。
※URL Rewrite Moduleは「web.config」の書き換えを行うので、設定変更後にIISの再起動が必要になります。
これで、httpのURLでアクセスしてきたリクエストはhttpsのURLに強制的に書き換えられることになります。
【追加設定】リダイレクト除外設定の追加
上記の設定をすることで、すべてのhttpを宛先にしたリクエストはhttpsにリダイレクトされるのですが、なかにはリダイレクトされてほしくないケースもあります。
例えば、内部のネットワークからサーバーのプライベートIPをホスト名として指定してきたURLや、このウェブサーバー自身が、URL内のホスト名をlocalhostなどに変更してブラウザで自ウェブサイトを表示させる場合などです。
そのため、正規のFQDNと異なるホスト名を指定したURLで接続したい場合は、httpのURLを使用する必要があります。
よって、そのようなケースの設定も簡単に紹介しておきます。
「受信規則の条件」に以下の条件を追加します。
条件の入力:{HTTP_HOST}
パターンに一致しない
パターン:^localhost$ とか ^127.0.0.1$ とか、^192.168.0.1(このサーバーのプライベートIPアドレスなど)$
この条件を追加しておくことで、ウェブサーバー自身がURLのホスト名をlocalhostなどに書き換えて自サイトにアクセスする場合や、ローカルネットワークからURLをプライベートアドレスに書き換えてアクセスしてきた場合に、httpのURLのまま接続することができます。
最後に
今回の記事では、IIS10で構築したウェブサーバーでhttpからhttpsにリダイレクトする設定方法を紹介しました。
今回紹介した「URL Rewrite Module」は、Apacheの「mod_rewrite」と同じようにリダイレクト設定が行えるので、Apacheになれた人であれば、比較的使い方は理解しやすいかと思います。
もし良ければ是非お試しください。
今回も読んでいただきましてありがとうございます。
それでは皆さまご機嫌よう!