この度 joytokey.net を新しいサーバに移転しました。
ところが思いのほか手間取ったので、将来の忘備録に、また誰かの役に立てばと思い、記録しておきます。
今思えば、httpsに移行する昔はサーバ移転するのは比較的簡単だったように思います。簡略化してしまえば、大きく以下の3ステップでできました。
- データを新しいサーバにコピー
- 新しいサーバ上で正しく表示されるか確認
- ネームサーバ・DNSレコードの変更をして、サーバを切り替え
ところが、最近は常時 SSL(https)化するのが常識になっています。
その場合、せっかくデータを完璧に移行しても、上記ステップ2が動かないのです。
なぜ新しいサーバで動作しないのか
https 化するとき、普通は .htaccess などをもちいて、http で来たリクエストを https にリダイレクトする設定になっていることと思います。
なので、新しいサーバで動作確認しようとしても https にリダイレクトされてしまうわけです。ところが、新しい移行先のサーバ上では有効な SSL 証明書がまだないため、https 通信がエラーになってしまいます。
じゃあ新しいサーバで無料SSLを有効にすればいいじゃないかと思うわけですが、それがなかなか大変なわけです。多くのレンタルサーバの場合SSL証明はドメイン単位で認証となるため、新しい移行先のサーバがドメインで参照できるようになっていないと(つまりネームサーバ・DNSレコードを切り替えてからでないと)、SSL有効化ができない・エラーになってしまうようです。
ダウンタイム無しで移行できるのか?
いろいろ調べてみたところ、常時SSL化してあるサイトを移転したい場合は、以下のどれかの方法を取るしかないようです。
- 多少のダウンタイムを覚悟して、ぶっちゃけ本番でDNSを切り替えてから、新しいサーバで証明書をインストール
- 古いサーバで一度 http に戻してから、新しいサーバに移転して、その後また https 化する
- 新しいサーバでなんとか事前にSSL証明書をインストールしておき、https のまま移転
ダウンタイム(エラー)が発生するのを許容できるのであれば、方法1が一番簡単ではあります。ただ、DNS情報が伝搬してから、その後さらにSSL証明書を有効化するのに時間がかかるため、最大数日程度アクセスがエラーになってしまう可能性があります。
方法2は SEO 的に悪影響が出そうなのと、またリンクされているページ・画像などが表示できなくなってしまう可能性があるので、あまりお勧めできないような気がします。
方法3は手間(もしくは費用)がかかりますが、ダウンタイム無しで移行できるはずです。
自分は2つのサイトを移行する必要があったので、
- jtksoft.net は(悲しいことにほとんどアクセス無いので)簡単な方法 1 で
- joytokey.net は手間はかかるが安全な方法 3 で
試してみました。
ぶっちゃけ本番で jtksoft.net を移行してみた(方法1)
とりあえず新しいサーバにデータコピーが終わった後、.htaccess での https リダイレクトだけコメントアウトしてみました。そうすれば、http でアクセスすれば、SSL証明書なしでも最低限の動作チェックはでき、またDNS切り替え中・また直後でも http プロトコルでならアクセスできることになります。
早速ネームサーバを切り替えた後、たまたまラッキーなことに10分程度で移転先のレンタルサーバ業者に浸透したようで、無料SSLの手続きを完了できました。ただ直後は https はまだエラーになり、その後30分程度で https でアクセスしてもエラーが発生しなくなりました。
つまり、ネームサーバを切り替えてから、1時間弱ぐらいの間に移行が完了したことになります。その間にアクセスした方達には、無効なURLやら、無効な証明書やらのエラーが発生したことになります。
ただし、これはとてもラッキーだったケースで、以下のもう一つのドメインでDNSを切り替えた場合は、移転先のレンタルサーバ業者まで反映されるのに半日以上かかったので、つまり無料SSL手続きを半日以上できなかったことになるので、ダウンタイムは半日以上かかってしまっただろうことになります。これは精神衛生上あまりよくありません。
事前に SSL 証明書を導入してから joytokey.net を移行してみた(方法3)
もう一つのドメイン joytokey.net の方は、毎日多くの方が訪れてくれるので、ダウンタイムは極力さけたかったです。なので、事前に移行先のサーバにSSL証明書を導入しておく(上記方法3)方法を取りました。
とはいえ、DNSを切り替える前にSSL証明書を導入するのはそんなに簡単ではないようです。
レンタルサーバの業者によっては、SSL証明書の持ち込みに対応している場合があります。そのようなラッキーな場合は、「稼働中の無料SSLサイトの移転!httpsのままでサーバー移転する方法!」に詳しく方法が書いてあるので、やってみてください。無料でできます。
ただ、今回の移転先(エックスサーバー)では、SSL証明書の持ち込み非対応でした、、、
その場合は、有料SSLを契約することで事前に導入することができました。有料SSLはメールを使ったドメイン認証もできるためです。詳しくは「エックスサーバーへSSL(https)サイトを移転する際の注意点」をご参照ください。有料とはいっても年1080円で、エラーなく(精神衛生上ストレスなく)移行できるので、安いものです。
実際に移行した際の記録ですが、有料SSLを事前に導入後、ネームサーバを切り替えたのが前日の 22:30 頃。その後 8 時間経った翌日 6:30 でも、まだエックスサーバおよび自宅のネットワークではDNSが切り替わっていませんでした。
8:30頃(10時間経った頃)、ようやくスマホのネットワークでは切り替わっているのを確認できました。証明書を元々インストールしていたので、もちろんエラーも無く無事にアクセスできました。ふぅ~、大成功です。
これが、もしも事前にSSL証明書を導入していなかったら(方法1を取っていたら)と思うとゾッとします…。DNS切り替えをこちらで確認するのに10時間程度かかっており、かつその後無料SSLの手続きをしてもさらに時間がかかるため、トータルでは半日以上エラーが発生していた可能性があります。
結論
DNS 変更が浸透するのにかかる時間は最大24から72時間程度かかりうるので、jtksoft.net を方法1で移行した際に1時間弱で完了した今回はラッキーだったと言えます。しかし、ラッキーでなかった場合は、SSL証明書なしの状態で移行すると最悪1日から数日程度エラーになってしまう可能性があるので、大事なサイトを移転するときは、手間や多少の費用を惜しまずに、事前に新しいサーバにSSL証明書を導入しておくのを強くお勧めします。