内容
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com
前回の記事「独自ドメインを設定する/障害時はSORRYページへ通信を流す」の続きです。
前回の記事
https://qiita.com/zakinicof/items/6c973c1aed9ebdeeb845
前回までの構成はブログサービスにアクセスするのにHTTPで通信をしていました。
このままではセキュリティに問題があるため、よりセキュアなHTTPSで通信できるように設定を変更していきます。
HTTPS通信をするために必要な証明書をAWS Certificate ManagerというAWSで証明書を管理できるサービスを利用します。
AWS Certificate Managerで証明書を発行してELBにアタッチすることでHTTPS通信を可能にしていきます。
その他、ELBのセキュリティグループでHTTPS通信を許可する設定の追加なども行なっていきます。

実施手順
前回の記事の構成がされていることを前提で進めていきます。
準備
- EC2インスタンスが2台立ち上がっていることを確認
- RDSを削除した場合は、スナップショットから復元しておく。
- 復元したデータベースのステータスが
利用可能になるまで待つ。 - 前回取得したドメインでブログが閲覧できることを確認しておく。
ロードバランサーでHTTPS通信を受け付ける
- EC2の画面に移動し、左のメニューから
ロードバランサーを選択 -
リスナータブを選択し、リスナーの追加を選択 - プロトコル:
HTTPSを選択 -
アクションの追加→転送先と進み、ターゲットグループを選択し、チェックボタンを選択 -
新しいACM証明書をリクエストを選択 - 証明書のリクエスト画面で
ドメイン名を入力して次へ進む。 - 検証方法の選択:
DNS の検証を選択して次へ -
確認とリクエストを選択 -
Route53でのレコードの作成を選択 -
作成を選択 -
続行を選択 - Route53の画面に移り、更新ボタンを選択、検証用のDNSレコードが追加されていることを確認する。
- リスナーの追加画面に戻り、
デフォルトのSSL証明書の項目で更新ボタンを選択し、先ほど作成した証明書を選択 - 右上の
リスナーの追加を選択
セキュリティグループの設定
- ロードバランサーの画面の
詳細タブを選択し、セキュリティグループを選択 - ロードバランサー用に作成したセキュリティグループを選択し、
インバウンドルールを編集を選択 -
ルールの追加を選択 - タイプ:
HTTPSを選択 - ソース:
0.0.0.0/0を選択 -
ルールを保存を選択
現在の状態でURLをhttpからhttpsに変更してアクセスすると、WordPressの仕様で表示が崩れてしまうため、EC2にコードを追加することで対応します。
WordPressの対応
- ターミナルを開き、SSH接続でEC2にログインする。接続したら権限をルート権限に変更しておく。
-
cd /var/www/html/でディレクトリを移動 -
llでwp-config.phpのファイルがあることを確認 -
vi wp-config.phpでファイルを開く。 -
編集が必要なのはここまでです!という記述が出てくるまで下にスクロールする。 - 上記の記述と
define( 'WP_DEBUG', false );の間に下記のコードを記述する。記述したら保存する。
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
}
同様の手順をもう1台のインスタンスでも実行します。
この後、再度httpsでアクセスすると通常通り表示されるはずですが、この段階でまだ表示が崩れている場合は下記の手順を行います。
- ターミナルを開き、SSH接続でEC2にログインする。
-
mysql -h RDSのエンドポイント名 -u ユーザー名 -pでMySQLにログイン USE データベース名-
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');コマンドを実行すると、ELBのDNS名になっていることが確認できます。これを、https://[独自ドメイン名]に変更します。 -
UPDATE wp_options SET option_value = 'https://[独自ドメイン名]' WHERE option_name IN ('siteurl', 'home');を実行 - 再度、
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');コマンドを実行し、URLが更新されていることを確認 - ブログに
https://[独自ドメイン名]でアクセスし、正常にブログが表示されていることを確認する。