503エラーを本サーバーで返せない時は仮サーバーで返すようにDNS設定を一時的に変更するといい

[対象: 中〜上級]

サーバーのメンテナンスなどでウェブサイトにユーザーが一時的にアクセスできなくなる場合は503エラーのHTTPステータスコードを返すように設定します。

しかしそのサーバーが電源を落とされたりネットワークから切り離されたりして、503を返すどころか完全にアクセスできない状態の時はどうしたらいいのでしょうか?

GoogleのJohn Mueller(ジョン・ミューラー)氏がGoogle+でアドバイスしています。

方法は簡単です。

  1. 一時的に使うウェブサーバーを用意する
  2. DNSの設定を変えて本来のウェブサーバーではなく一時的なウェブサーバーに向ける
  3. 一時的なサーバーで503を返す
  4. 本来のウェブサーバーがオンラインに復帰したらDNS設定を元に戻す

簡単に言うと、アクセス可能な別のサーバーで503を返すということです。
元々のサイトにユーザーがアクセスした際はそちらのサーバーに繋がるようにDNSの設定を臨時で変更します。

一時的に使うサーバーを用意するといっても、新しいサーバーを買うとか新たに契約する必要はありません。
他に使えるサーバーがあればそれが代役を務めます。

503を返すだけなのでコンテンツのコピーや大がかりな構成変更は不要です。

ミューラー氏は触れていませんが、TTLは短めに設定しておいたほうがいいですね。
DNSのキャッシュが残っていると本サーバーがオフラインになっているのに一時サーバーではなく、本サーバーに名前解決されてしまいます。
逆に本サーバーがオンラインに復旧しているのに一時サーバーに名前解決されてしまいます。
※DNSの詳しい仕組みや設定方法は各自で調べてください。

完全な代替となるサーバーを準備してサービスを継続することも考えられますが手間暇がかかるしDBと連携している場合などはさらに面倒になります。

長期にわたって本サーバーが使えない時は別サーバーに完全に移すべきとしても、30分や1時間くらいのオフラインであれば503エラーを返すようにしたほうがトラブルも少なく簡単です。

ですが、本サーバーで503を返せない時は別サーバーを準備してそちらで503を返すといいというのが今日のトピックでした。

補足になります。

メンテナンス中を伝えるページをHTTPステータスコード200で返して(通常表示させては)はいけません。
エラーメッセージのページが本来のページと置き換わってインデックスされます。

301や302でのリダイレクトも不適切です。
リダイレクト先がインデックスされてしまうでしょう。

メンテナンスが終わって元の状態に戻ればいずれはインデックスも元どおりになるはずですが時間がかかることが予想されます。

一時的なアクセス停止状態のときは必ず503エラーのHTTPステータスコードを返すようにします。

503を返すことで検索エンジンのインデックスやランキングに悪い影響を与えなくすることができます。