今回はWordPressサーバーの前にロードバランサーを置く際の注意点を記載する。
経緯
AWSを使用してWordPressサーバーを構築することになった。
その際、WordPressでHTTPSへのリダイレクト設定を行うと無限にリダイレクトが発生してしまい画面が表示されなかった。
構成と原因
使用サービス
AWS:ALB、EC2
原因
ALBとEC2の間の通信プロトコルがHTTPだったため、WordPressがHTTPSへリダイレクトをする。
クライアントとALBの間はHTTPSであるが、WordPressに届く通信がHTTPであるため、無限にHTTPSへリダイレクトさせるので、画面に表示されない。
解決策
解決策1.HTTP_X_FORWARDED_PROTOを見る
ロードバランサーを経たリクエストが各サーバーに分散される時、リクエストヘッダーにHTTP_X_FORWARDED_PROTOという項目が付与される。これは、クライアントとロードバランサーの間の通信プロトコルが格納されており、リダイレクトを実行するか否かの検証を行う際にこの項目を見るようにすることで、ALBからWordPressサーバーへの通信プロトコルではなく、クライアントからALBの通信プロトコルによってリダイレクトを実施することができる。
具体的な方法は下記。
ただ、これだとターゲットグループのヘルスチェックが通らないため、既存のWordPressを移管するとき以外はあまりお勧めできない。
解決策2.WordPressのHTTPSリダイレクトをやめる
2つ目の解決策としてはWordPressによるHTTPSリダイレクトをやめること。クライアントからのリクエストをHTTPSに強制するためにはALBを使用する。
これによってユーザーとサーバーの間は暗号化された通信が担保されるので、一番シンプルであると考える。
解決策3.プライベート証明書を自己証明書を使用する
最後はALBとEC2の間をHTTPS通信にする方法。クライアントとサーバー間だけでなく、プライベートネットワーク内でも通信を暗号化したい場合に使用する。
とはいえ、プライベートなサーバーなので通常のACMによる証明書の発行ではなく、プライベート証明書か自己証明書を作成する方法である。
因みにこの方法は実践したことないがないので、大体ここらへんの知識を合わせればいけるんじゃないかという記事を残しておく。