はじめに
こんにちは、技術部の内藤です。
前回の記事 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にリダイレクトさせてあげましょう。