内容
この記事は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://[独自ドメイン名]
でアクセスし、正常にブログが表示されていることを確認する。