はじめに
こんにちは、技術部の内藤です。
前回の記事 Let's Encryptで発行した証明書とOCIの証明書サービスでOCIのロードバランサーをHTTPS化する では、Let's EncryptのTLS証明書をOCIの証明書サービスにインポートし、ロードバランサーでHTTPS化を行いました。
今回はその続きとして、HTTPでアクセスされた場合に自動的にHTTPSにリダイレクトする設定を説明します。OCIのロードバランサーでは、ルールセット機能を使ってHTTPからHTTPSへのリダイレクトを実現できます。
ロードバランサーのルールセット
OCIのロードバランサーのルールセット機能は、リクエストやレスポンスを処理する際に特定のルールを適用できる機能です。
主な用途として以下があります。
- HTTPからHTTPSへのリダイレクト
- リクエストヘッダーの追加・削除・変更
- レスポンスヘッダーの追加・削除・変更
- パスベースのルーティング
詳しくは、公式の資料をご覧ください。
リダイレクト用ルールセットの作成
HTTPからHTTPSへのリダイレクトを行うルールセットを作成します。
- ロードバランサーの詳細画面のメニューから「ルール・セット」を選択
- 「ルール・セットの作成」ボタンをクリック
- 以下の設定を行います
- 名前:
http_to_https_redirect
- なお、ルールセットの名前には、記号はアンダースコアしか使えません
- URLリダイレクト・ルールの指定: オンにする
- ソースのパス:
/
- 一致タイプ:
最長接頭辞の強制一致
- それ以外の各項目はデフォルト値から以下のみ変更
- プロトコル:
HTTPS
- ポート:
443
- ステータスコード:
301
- プロトコル:
完全なURL
だと https://{host}:443/{path}?{query}
です。
この設定により、HTTP(ポート80)へのすべてのリクエストが、同じホスト名・パス・クエリパラメータを維持したままHTTPS(ポート443)にリダイレクトされます。
(まだの場合)HTTPリスナーの作成
前回の記事でHTTPS(ポート443)のリスナーは作成済みですが、HTTPのリスナーがない場合は作成しましょう。HTTPSリスナーも作成していない場合は、前回の記事を参考に作成してください。
ロードバランサーの詳細画面から「リスナー」を選択し、「リスナーの作成」をクリックします。
以下の設定でHTTPリスナーを作成します。
- 名前:
http-Listener
(任意の名前) - プロトコル:
HTTP
- ポート:
80
- バックエンドセット: 既存のバックエンドセットを選択
HTTPリスナーにルールセットを適用
作成したルールセットをHTTPリスナーに適用します。
- リスナーの編集画面を開く
- 「ルールセット」の項目で、先ほど作成した
http_to_https_redirect
を選択 - 「変更の保存」をクリック
設定が完了すると、HTTPリスナーにルールセットが適用されます。
(まだの場合)NSGの設定
ロードバランサーにアタッチしているNSGで、TCPのポート80(HTTP)のアクセスを許可してください。
動作確認
設定が完了したら、実際にリダイレクトが動作するか確認してみましょう。
ブラウザで http://xxx.jp
にアクセスしてみてください。自動的に https://xxx.jp
にリダイレクトされることを確認できます。
もちろん、curlコマンドでも確認できます。ステータスコード301とLocationヘッダーでHTTPSのURLが返されます。
# リダイレクトの詳細を確認
curl -I http://xxx.jp
# 出力
HTTP/1.1 301 Moved Permanently
# 略
Location: https://xxx.jp/
# 略
おわりに
現代のWebでHTTPでアクセスさせることはほぼないので、HTTPのリクエストはHTTPSにリダイレクトさせてあげましょう。