WordPressはAWSで二台構成で運営する場合、CloudfrontとALBを挟むとマジで辛い経験をされた方は多いのではないでしょうか。
例えば?
・ビジュアルエディターモードが出ない
・リダイレクト問題
・Cloudfrontのキャッシュでwordpressのダッシュボードが死んでプレビューがTOPに戻る
・ALB設定ミスでwordpressダッシュボードにログインできない
などなど。そこらへん初めて構築してハマることがないように今回はブログします。
■構成
動きとしてはユーザ→Cloudfront(443)→ALB(80)→EC2(80)なので、証明書はACMを使ってクラフロのみ443にし、内部は80で返してます。もちろんwordpressのダッシュボードもCloudfront経由でアクセスする想定です。
■wp-config.php
1 2 3 4 |
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on'; } |
- WordPressの仕様について
CloudfrontからALBにアクセスすると80→443に対応(プロキシ変換)していないため、コンテンツ等型ずれが起きます。強制的にそうならないよう上記をwp-config.phpに直接書きます。
■ALB(Load Balancer)
ロードバランサーはもちろん分散しているため、デフォルトはブラウザでwordpressを編集する(ダッシュボード)と二台目(web02)にもアクセスされてしまいます。(ログインしたのにログアウトされてしまう)ロードバランサ上の設定を変更して/var/www/html/wp/配下は一台目(web01)のみアクセスしないようにします。
- 一台目(web01)を指すターゲットグループを作成
- 既存のリスナーから「ロードバランサ」-「ルールの表示/編集」
- 各ルールの追加
■Cloudfront
- Behavior
上から見ていきましょう。基本wp-admin、wp-login.php、*phpはマストでキャッシュ0にします。記事書いてプレビューすると何故かログアウトされTOPページにリダイレクトされるので注意しましょう。もしくはログインができません。さらにCloudFrontからアクセスした場合、User-agentは「Amazon CloudFront」で書き換えられます。PCからのアクセスでないと判定されビジュアルエディタモードがOFFになってしまうため上記のようにホワイトリストを追記します。Defaultはちゃんとキャッシュするように!
- Hit from cloudfront
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ curl -I https://adachin.com HTTP/2 200 content-type: text/html; charset=UTF-8 content-length: 0 date: Fri, 19 Jan 2018 xxxxxxxxxx GMT set-cookie: AWSALB=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GMT; Path=/ server: h2o/2.2.4 x-powered-by: PHP/7.0.21 link: <https://adachin.com/wp-json/>; rel="https://api.w.org/" age: 93 x-cache: Hit from cloudfront via: 1.1 xxxxxxxxxxxxxxxxxxxxxxxxxx.cloudfront.net (CloudFront) x-amz-cf-id: xxxxxxxxxxxxxxxxxxxxxxxxxx== |
curlコマンドでキャッシュ聞いてるか確認できるのでやってみると良いでしょう。ちゃんとadachin.comはx-cache: Hit from cloudfrontになっていることが分かります。※ちなみにドメインは適当
■まとめ
WordPressめ!と言いたいところですが、2台構成で究極な負荷分散を実現できます。これら設定漏れあると死んでしまうのでterraformで全てコード化すると良いですね
参考
https://qiita.com/Ichiro_Tsuji/items/38592e737257cb45ca13
2件のコメント
竹田 · 2018/10/17 1:54 pm
まさに下記の二件で困っていたところ、記事を拝見しました。
・リダイレクト問題
・ALB設定ミスでwordpressダッシュボードにログインできない
これら問題を、記事内のALB(Load Balancer)を見ながら設定したところ、無事に解決できました。
ほんとうにありがとうございました。
ネットの海を巡回しても、リダイレクトの原因が多すぎて、にっちもさっちも行かないところでしたので。
あだちん · 2018/10/18 6:53 pm
マジですか!!手助けできてよかったです!!