ドメインを変更した。
しばらくの間、ときどきこのブログ見えなくなったりするかもしれません。
gunmagisgeek.comになりました。
連休中とくにやることもなかったので、以前から「いつかやる」と放置状態だったドメインの変更作業をすることにした。
ついでにサーバーも新規で構築し、OSを「CentOS」から「Ubuntu Server」に、PHPのバージョンも「7.2」から「7.4」へと上げた。
結果的にDNSやCDNやリダイレクトループと格闘するはめになったけれど、とりあえず移行できたようなので良しとする。
ほんとはWordpressやめてGatsby.jsとかに変えようかとも思ったけれど、過去のパーマリンクを移行するのがなかなかうまくいかなかったので、今回は断念。
以下は、作業中の気づきについての個人的なメモ
やってから気づいたこと。
ドメインの変更は順番が大事
CDN(Cloudflare)、とくにエッジ側でSSLの証明書を発行している場合、IPアドレスの切り替えタイミングは、順番が重要。
まず、新サーバーを構築し新ドメインの設定、CDNの設定、SSLの設定をすます。エッジ側の証明書はサービスによって発行されるまでに時間がかかる場合があるので注意。(以前はサクッと発行されたのに、今回は時間がかかっているなーってこともあるので焦らない)
ブラウザとエッジ間、エッジとオリジン間のSSL通信が成立するようになってからWordpressの構築を始める。(http下や、IPアドレス直下で構築しても後々めんどなことが多いという知見を得た)
これらが終わってから、旧ドメインのIPアドレス転送先を変更する。
このときCDNの転送設定をいじる前に、DNS(うちはお名前.comを使ってる)のネームサーバーをデフォルトの状態にもどし、旧ドメインの転送先IPアドレスを変更する。
こうすると、旧ドメインでのアクセスがCDNを経由しなくなるので、なにかあったときのトラブルシュートがしやすい。
ただ、旧ドメインのSSL設定でエッジとオリジン間の通信に自己証明書や、エッジとオリジン間の通信にのみ有効な証明書を使っていた場合、転送先IPアドレスが切り替わったタイミングで、旧ドメインでのアクセス時に証明書エラーがでる。
これをなんとかエラーを出さずに切り替えられないかなぁと思っていたけれど、諸々のトラブルシュートに追われそれどころじゃなくなってしまったのでどうしようもない。(まぁ、たぶんお金のチカラでオリジンに有効な証明書入れてやればたぶんエラーを出さずに切り替えられると思う)
CDNを経由しない状態で旧ドメインの転送先IPアドレスを変更が終わったら、改めてネームサーバーを変更し、CDNの再度経由するように変更し、CDN側でも新しいIPアドレスへ転送するように変更する。(この再設定を行うと、旧ドメインでアクセスした際にエッジとオリジン間でSSL通信に失敗する場合がある。いろいろ試してみたけれどうまくいかなかったので、旧ドメインでのアクセスの場合だけエッジとオリジン間の通信をフラットに設定した)
あと、やっぱりキャッシュは切っておいた方がよい。
「あれ見えた」「見えなくなった」みたいなことを繰り返す羽目になるぞ自分。
ぶっちゃけスゲー面倒だった。
All-in-One WP Migration
WordPressのデータを簡単に移行できるプラグインでとても便利なのだけど、いくつかはまったところがあったのでメモっておく。
・インポート後にユーザーのデータも元のサイトのものに書き換わる
ユーザー情報が書き換わった上に強制的にログアウトされるので、旧サイトのIDとPWを覚えてないと「ログインできない!」と慌てることになるので注意。
・http下や、IPアドレス直下でインポートしない
内部のリンクをすべて設定されているWordpressアドレスに変更してくれるのだけれど、仮のURLを設定していると全部ソレに置き換わってしまうので、ドメイン移行やSSLの設定が終わってっからやった方が良い。(やっちまったぜ、という場合はSearch Regexプラグイン をつかって内部リンクを書き換えよう)
・プラグインは残しておいた方がよさそう
これは自分の設定が悪いのかもしれないが、All-in-One WP Migrationを削除すると、インポート時と同じ強制ログアウトが発生した。おまけに、管理画面に入るとリダイレクトループが起きて何も操作することができず、pluginディレクトリを丸ごと消してみてもリダイレクトループ地獄から抜け出せず、管理画面に到達できなくなるという状態が発生した。怖い。
リダイレクトムズイ
うちのようにwordpressをblogディレクトリなどルートから一段下に設置していると、ルートで設定したリダイレクトとwordpressが動的に作成するリダイレクトの設定とがうまくかみ合わず、なんかよくわからんことになったりする。
一部どうしても旧ドメインから新ドメインへリダイレクトされない部分があって、仕方がないのでJSで強制的に新ドメインへ飛ばしてる。
リダイレクト処理、ほんと難しい。