27

Elastic Beanstalk ロード バランサーの背後にいるときに、IIS の URL 書き換えモジュールを使用して、ユーザーに ssl の使用を強制するにはどうすればよいですか?

4

4 に答える 4

42

これは、いくつかの理由から、思ったよりも困難です。1 つ目は、ロード バランサーが ssl を処理しているため、ロード バランサーから渡されたリクエストが決して ssl を使用していないことです。従来の書き換えルールを使用すると、リダイレクトの無限ループが発生します。対処すべきもう 1 つの問題は、AWS ヘルスチェックがリダイレクト レスポンスを受信すると失敗することです。

  1. ソリューションの最初のステップは、healthcheck.html ページを作成し、ルート ディレクトリに設定することです。内容は何でも構いません。
  2. ヘルスチェックに healthcheck.html ファイルを使用するようにロードバランサーを設定します。
  3. 以下の書き換えルールを web.config の<system.webServer><rewrite><rules>セクションに追加します。

    <rule name="Force Https" stopProcessing="true">
       <match url="healthcheck.html" negate="true" />
       <conditions>
           <add input="{HTTP_X_FORWARDED_PROTO}" pattern="https" negate="true" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
    </rule>
    

ルールの一致は、ヘルスチェック ファイル以外のものであることに注意してください。これにより、ロード バランサーのヘルス チェックが成功し、サーバーが誤って負荷から除外されることがなくなります。

ロード バランサーはヘッダーで X-Forwarded-Proto 値を渡します。これにより、リクエストが https 経由で行われたかどうかがわかります。その値が https でない場合にルールがトリガーされ、https を使用して永続的なリダイレクトが返されます。

于 2013-11-05T14:52:59.313 に答える