AWS ELB ロードバランシング設定後の微調整について

前回の投稿で、AWS ELB ロードバランシングをセットアップしましたが、Route53の変更とSSLリダイレクトの微調整がまだ行っていなかったので、今回はそのやり方です。

1.Route53のドメイン名とELBとの関連付け

 

AWSサービスから「Route53」を選びます
Route53ダッシュボードを見ると、ドメインについて、
正引きのホストゾーンと逆引きのホストゾーンとで
2つ登録されています。

 

ホストゾーンに移動します。

ドメインについて、
正引きのホストゾーンと逆引きのホストゾーン
が並んで表示されています。
両方のホストゾーンにあるAレコードを直します。
まず、正引きホストゾーンのドメイン名をクリック
正引きホストゾーンのレコードが並んでいます。
このうちのタイプがAのデータが、Webサーバを表すAレコードになりますので、このレコードの先頭チェックを選択して、「編集」をクリックします。
「レコードタイプに応じたIPアドレスまたは別の値」にカーソルを持っていきます。
「レコードタイプに応じたIPアドレスまたは別の値」
の部分が展開されて、リストになるので、

 

 

 

「Application Load Balancer と classic Load Balancer へのエイリアス」を選択します。

次に、すでに東京リージョンになっていると思いますが、カーソルを入れて、もう一度選びなおすと
東京リージョンが再設定されると、その下の選択項目が選べるようになって、そこにカーソルを入れると、ELBの設定で登録したELB登録名が表示されて、これを確定できるようになります。

 

このようにして、正引きドメインのWebサーバを表すAレコードを、ELBのエイリアス定義に変更できたので、「変更を保存」で確定します。

 

同様の操作で、逆引きドメインにもWebサーバを表すAレコードがありますので、これをELBのエイリアス定義に変更します。

 

2.SSLリダイレクトの微調整

 

WebサーバがApacheで、普通のWebサイトのSSL化を行う場合、デフォルトのドキュメントルート (HTMLの置き場)にある「.htaccess」ファイルに以下を追加します。

vi /var/www/html/.htaccess

# SSL
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
</IfModule>

さらに、ELBがSSLを終端して後方のWordPressに渡しますが、WordPressは https を http としてリダイレクトするので、リダイレクトループが発生してしまいます。そのため、ELBアクセス&httpsの場合に、httpsのフローとして、WordPress側で受けられるように修正します。

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';

define('WP_SITEURL', 'https://[WebAccessURL]');
define('WP_HOME', 'https://[WebAccessURL]');

 

ただし、どうも http で運用していたサイトを途中でSSL化したときに、同じように修正を加えていても、うまく行かないときがあったり、なかったり・・・

普通のパブリックDNSアドレスでの http 通信から、Route53で設定して、ELB配下に入るタイミングや WordPress の WP_SITEURL WP_HOME を変更するタイミングなどでエラーを起こし、ELBのヘルスチェックがエラーとなったりしてどうも難しい!!

私がELBでSSL化するやり方を参考にした本では、改訂して、このSSL化の部分をプラグイン「SSL Insecure Content Fixer」によって実装していた。
こちらの方が楽ちんで失敗も少ないと思われるので、プラグインでSSL化したほうが良いのかもしれない!!

 

AWS TIPS はこちら!