WordPressをマルチドメイン化してSSL対応【#np2020】

Amazon_Lightsail_Network.jpg

新サーバにWordPressを導入して管理しているブログのうち、「どうでしょう日記アーカイブ」(現在更新停止中)を切り替えました。WordPressの導入自体はとても簡単だったんですが、SSL周りの設定でかなりはまったのでメモ。




概要

全体のイメージとしてはこんな感じです。

  • WordPressをマルチドメインとして利用する
  • 複数のブログを管理する
  • そのうちの1つをSSL対応する



WordPressの管理画面をSSL化する

まず最初にやったのはWordPressの管理画面をSSL化することです。マルチドメイン化するとブログごとの管理画面はそのブログのドメインになるのですが、全体の設定は管理用ドメインを使うのでSSL化が必要です。

SSL化の方法についてはこの記事にあるとおりです。

AmazonのVPSサービス(Lightsail)を使い、独自ドメイン・SSL対応したWordPressを構築($3.50〜/月) | DevelopersIO

特に4の「CloudFront の構築」が重要です。Behaviorの設定は同じようなものを3つ設定するのが面倒ですが、これをきちんとやらないと次のような症状が出ます。

  • HTTPSとHTTPとの間で無限ループが起きてページが表示されない
  • ページの表示が崩れる(一部のファイルがHTTPSで安全に読み込まれない)

その上でお守り代わりにプラグイン「Really Simple SSL」を入れると、コンテンツ内の「http://」がいい感じに「https://」になってくれます。


個別のブログのSSL化を行う

マルチドメインなので管理用とは別に個別のブログごとのドメインがあるんですが、そのドメインそれぞれについてもCloudFrontの設定を行います。内容は管理画面の時とほぼ同じ。プラグイン「Really Simple SSL」をサイト側でも有効にしておきます。

これを行うことでサイトがSSL出来るんですが、この段階では次の問題が起きています。

  • 投稿に失敗する
  • テーマのカスタマイズ(外観)でプレビューが表示されない(「Non-existent changeset UUID.」と表示されたあとログインフォームが表示)
  • 投稿のプレビューが表示出来ない(「下書きをプレビューする権限がありません。」との表示)

それぞれ以下の対応を取りました。


投稿に失敗する

CloudFrontでの設定にミスがありました。3つのBehaviorをもう一度見直し、設定し直したら直りました。特に大事なのは、「Cache Based on Selected Request Headers」と「Forward Cookies」です。


テーマのカスタマイズ(外観)でプレビューが表示されない(「Non-existent changeset UUID.」と表示されたあとログインフォームが表示)

この解決のために、CloudFrontのBehaviorに「/wp-json/*」に関する設定を追加します。内容は「/wp-admin/*」と同じです。


投稿のプレビューが表示出来ない(「下書きをプレビューする権限がありません。」との表示)

これが一番難儀しましたが、最終的には最初に挙げた記事に誤りがあることが解り、それを修正したら直りました。

誤りはCloudFrontの「Forward Cookies」の設定部分。

  • comment_author_
  • wordpress_logged_in_
  • wordpress_test_cookie
  • wp-settings-*

となっていますが、問題は「wordpress_logged_in_」の部分。実際のCookieは「wordpress_logged_in_fd491bba25ef1d8a14afc4190c7c786a」見たいなハッシュが付いた名前になっているので、この設定だとログイン状態を引き継げません。正しくは、

  • comment_author_
  • wordpress_logged_in_*
  • wordpress_test_cookie
  • wp-settings-*

とアスタリスクが必要です。
これで無事投稿プレビューが出来るようになりました。



まとめ

というわけで今回移行したブログに関しては、

  • WordPressマルチドメインにおけるSSL対応
  • サーバの変更
  • MovableType → WordPressの移行

といったことを一気に行いました。手間は掛かりましたが、結果的にとても快適になったので良かったかなと思います。

ちなみにそれと関連して、

  • GMailの設定が載ったネームサーバの変更
  • ネームサーバの変更
  • ドメインの移管

といったこともしています。


さて、いよいよ大物のメインブログの引っ越しに掛かりますか……と、その前に「Laravelを導入して必要な機能を用意する」という作業があるんですが。。ぐぬぬ。それやりつつ、ドメインの移管とか進めようかな。



参考サイト

AmazonのVPSサービス(Lightsail)を使い、独自ドメイン・SSL対応したWordPressを構築($3.50〜/月) | DevelopersIO
WordPress 製のサイトに CloudFront を導入してバリバリキャッシュさせようと検討したときの記録 | ハックノート
CloudFront + WordPress (4.9.8以降?) で WP REST API 403 rest_cookie_invalid_nonce が出たときの対応方法 – Qiita