Pocket

WordPressはAWSで二台構成で運営する場合、CloudfrontとALBを挟むとマジで辛い経験をされた方は多いのではないでしょうか。

例えば?

・ビジュアルエディターモードが出ない
・リダイレクト問題
・Cloudfrontのキャッシュでwordpressのダッシュボードが死んでプレビューがTOPに戻る
・ALB設定ミスでwordpressダッシュボードにログインできない

などなど。そこらへん初めて構築してハマることがないように今回はブログします。


■構成

動きとしてはユーザ→Cloudfront(443)→ALB(80)→EC2(80)なので、証明書はACMを使ってクラフロのみ443にし、内部は80で返してます。もちろんwordpressのダッシュボードもCloudfront経由でアクセスする想定です。


■wp-config.php

  • WordPressの仕様について

CloudfrontからALBにアクセスすると80→443に対応(プロキシ変換)していないため、コンテンツ等型ずれが起きます。強制的にそうならないよう上記をwp-config.phpに直接書きます。


■ALB(Load Balancer)

ロードバランサーはもちろん分散しているため、デフォルトはブラウザでwordpressを編集する(ダッシュボード)と二台目(web02)にもアクセスされてしまいます。(ログインしたのにログアウトされてしまう)ロードバランサ上の設定を変更して/var/www/html/wp/配下は一台目(web01)のみアクセスしないようにします。

  • 一台目(web01)を指すターゲットグループを作成

  • 既存のリスナーから「ロードバランサ」-「ルールの表示/編集」

  • 各ルールの追加

これでALBは問題ないはず!


■Cloudfront

  • Behavior

上から見ていきましょう。基本wp-admin、wp-login.php、*phpはマストでキャッシュ0にします。記事書いてプレビューすると何故かログアウトされTOPページにリダイレクトされるので注意しましょう。もしくはログインができません。さらにCloudFrontからアクセスした場合、User-agent「Amazon CloudFront」で書き換えられます。PCからのアクセスでないと判定されビジュアルエディタモードがOFFになってしまうため上記のようにホワイトリストを追記します。Defaultはちゃんとキャッシュするように!

  • Hit from cloudfront

curlコマンドでキャッシュ聞いてるか確認できるのでやってみると良いでしょう。ちゃんとadachin.comはx-cache: Hit from cloudfrontになっていることが分かります。※ちなみにドメインは適当


■まとめ

WordPressめ!と言いたいところですが、2台構成で究極な負荷分散を実現できます。これら設定漏れあると死んでしまうのでterraformで全てコード化すると良いですね

参考
https://qiita.com/Ichiro_Tsuji/items/38592e737257cb45ca13

Pocket

カテゴリー: AWSWordPress

adachin

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

2件のコメント

竹田 · 2018/10/17 1:54 pm

まさに下記の二件で困っていたところ、記事を拝見しました。
・リダイレクト問題
・ALB設定ミスでwordpressダッシュボードにログインできない

これら問題を、記事内のALB(Load Balancer)を見ながら設定したところ、無事に解決できました。
ほんとうにありがとうございました。
ネットの海を巡回しても、リダイレクトの原因が多すぎて、にっちもさっちも行かないところでしたので。

    あだちん · 2018/10/18 6:53 pm

    マジですか!!手助けできてよかったです!!

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください