IIS (Windows Server) で HTTP を HTTPS にリダイレクトする方法

IIS ウェブサイトに SSL 証明書をインストールしたら、すべての訪問者が指一本動かすことなく、安全な HTTPS バージョンにリダイレクトされるようにしたいと考えるのはよくあることです。そこでリダイレクトルールを設定するのは良いアイデアです。しかし、正直に言うと、必ずしも簡単ではありません。特に IIS が 403.4 Forbidden などのエラーで応答しない場合や、リダイレクトが全く機能しない場合はなおさらです。問題は、IIS が SSL 設定と競合したり、web.config を適切に調整し忘れたりすることです。そこで、少しでも頭を悩ませることのないような概要を以下にご紹介します。

IIS ですべての HTTP リクエストを HTTPS にリダイレクトする方法

方法1: URL書き換えマネージャーを使用してリダイレクトルールを設定する

これは最も一般的な方法で、正しく実行すれば実際にかなりうまく機能します。なぜこれが有効なのか:ポート80(HTTP)で受信されるすべてのリクエストを傍受し、ポート443(HTTPS)にリダイレクトするからです。主に、訪問者が「https://」を指定せずにドメインを入力した場合に適用されます。期待される効果は? 全員が自動的に安全なバージョンにリダイレクトされるということです。ただし、注意が必要です。サイトの設定でSSLが必須になっている場合、IISがリダイレクトで処理を失敗する可能性があります。

まず、IIS用のURL書き換えモジュール2.1がインストールされていることを確認してください。このモジュールがこれらのルールを処理するからです。ここからダウンロードできます。インストールはWindowsと格闘しているような感じになることもありますが(もちろん、複雑になるのは避けられません)、インストールさえ済めば、カスタムルールを作成できるようになります。

ウェブサイトをHTTPSに設定し、リダイレクトを設定する

  • インターネット インフォメーション サービス (IIS) マネージャーを開きます。 を実行しますinetmgr
  • 「サイト」セクションで自分のウェブサイトをクリックします。
  • サイトの「SSL設定」タブに移動します。 「SSLが必要」のチェックが外れていることを確認してください。チェックが入っているとリダイレクトが競合し、「403.4 Forbidden」などのエラーが発生する可能性があります。SSLを強制したいのですが、この段階では強制しないでください。そうしないとループに陥ってしまいます。
  • URL書き換えセクションに移動します。表示されない場合は、モジュールが正しくインストールされていることを確認してください。

新しいリダイレクトルールを作成する

  • [ルールの追加]をクリックし、[空のルール]を選択します。
  • 「HTTPS にリダイレクト」のような名前を付けます。
<rule name="Redirect_HTTP_to_HTTPS" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> <add input="{HTTPS}" pattern="OFF" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent (301)" /> </rule>

ルールの設定で、次の操作を行います。 – [要求された URL]で、 を選択しますMatches the Pattern。 – [使用]で、 を選択しますWildcards。 – パターン:*

条件セクションでは、次の操作を行います。

  • 条件入力を に設定します{HTTPS}
  • 入力文字列がパターンと一致するかどうかを確認します。
  • パターン: OFF— HTTPS がアクティブでない場合を意味します。
  • 大文字と小文字を区別しません: enabled.

次に、[アクション]セクションで以下を指定します。

  • アクションタイプ:Redirect
  • リダイレクトURL:https://{HTTP_HOST}{REQUEST_URI}
  • リダイレクトタイプ:Permanent (301)

このルールを保存したら、iisresetコマンドプロンプト(管理者権限)から実行してください。これによりキャッシュがクリアされ、変更が適用されます。その後、https を無効にしてサイトにアクセスし、HTTPS にリダイレクトされるかどうかを確認してください。

補足:web.configに競合するルールがないことを確認してください。直接編集する方が早く、予測しやすい場合もあります。以下のコードをコピーして web.config に貼り付けてください

<configuration> <system.webServer> <rewrite> <rules> <rule name="Redirect_HTTP_to_HTTPS" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> <add input="{HTTPS}" pattern="OFF" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer> </configuration>

はい、この設定はWindows Server 2022、2019、2016、そしてIISを搭載したWindows 10/11で動作するはずです。すべてのエッジケースでの動作を保証するものではありませんが、ほとんどの環境では十分に安全です。

なぜこんなに複雑になるのか、時々理解できません。IIS は設定が細かくて、SSL 設定が競合することがあるからです。でも、このアプローチはかなり堅牢で、ある設定では完璧に動作しました。別の設定では… あまりうまく動作しませんでした。ルールの競合や SSL 強制設定に注意してください。IIS なんてこった。

まとめ

  • URL書き換えモジュールをインストールする
  • 必要に応じてSSL設定を無効にするか調整する
  • IIS または web.config でリダイレクト ルールを作成する
  • 実行しiisresetてテストする

まとめ

経験上、IISでリダイレクトを設定する方が、autoconfスクリプトをいじったりサードパーティ製のツールを使ったりするよりも信頼性が高いです。ルールを正しく設定し、SSL設定が互いに競合しないようにする必要があります。これがうまく機能し、訪問者がURLをあれこれいじることなく安全な環境を維持できるようになることを願っています。