AWS ELB ロードバランシング設定後の微調整について
前回の投稿で、AWS ELB ロードバランシングをセットアップしましたが、Route53の変更とSSLリダイレクトの微調整がまだ行っていなかったので、今回はそのやり方です。
1.Route53のドメイン名と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化したほうが良いのかもしれない!!