OCIのロードバランサーでHTTPをHTTPSにリダイレクトする

はじめに

こんにちは、技術部の内藤です。

前回の記事 Let's Encryptで発行した証明書とOCIの証明書サービスでOCIのロードバランサーをHTTPS化する では、Let's EncryptのTLS証明書をOCIの証明書サービスにインポートし、ロードバランサーでHTTPS化を行いました。

今回はその続きとして、HTTPでアクセスされた場合に自動的にHTTPSにリダイレクトする設定を説明します。OCIのロードバランサーでは、ルールセット機能を使ってHTTPからHTTPSへのリダイレクトを実現できます。

ロードバランサーのルールセット

OCIのロードバランサーのルールセット機能は、リクエストやレスポンスを処理する際に特定のルールを適用できる機能です。

主な用途として以下があります。

  • HTTPからHTTPSへのリダイレクト
  • リクエストヘッダーの追加・削除・変更
  • レスポンスヘッダーの追加・削除・変更
  • パスベースのルーティング

詳しくは、公式の資料をご覧ください。

リダイレクト用ルールセットの作成

HTTPからHTTPSへのリダイレクトを行うルールセットを作成します。

  1. ロードバランサーの詳細画面のメニューから「ルール・セット」を選択
  2. 「ルール・セットの作成」ボタンをクリック
  3. 以下の設定を行います
  • 名前: 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リスナーに適用します。

  1. リスナーの編集画面を開く
  2. 「ルールセット」の項目で、先ほど作成した http_to_https_redirect を選択
  3. 「変更の保存」をクリック

リスナーにルールセットを設定

設定が完了すると、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にリダイレクトさせてあげましょう。