Cosnomi

プログラミングをする医学生。物を作ること、自動化すること、今まで知らなかったことを知ることが好き。TypeScript書いたり、Pythonで機械学習したりなど。

Twitter / GitHub / Keybase
TOP >

鯖落ちしてても強引に503を返す方法

サーバーを意図的に落とす際、ただ電源を切るのみだとずっと応答を返せず接続元でtimeout errorを引き起こしてしまいます。これは問題です。接続元がtimeoutを適切に処理していればエラー表示のみで問題はないのですが、timeoutを設定していないために応答までいつまでも待機したり、リトライを繰り返したりすることがあるからです。

例えば、Mastodonのインスタンスは他インスタンスにアクセスできないとリトライのキューに加えていくため、それがどんどんと蓄積してしまいパフォーマンスに深刻な影響を及ぼします。

サービスが何らかの理由で中断していることを表すステータスコードとして503 Service Unavailableがありますが、サーバーの電源を落としてしまってはこれすら返せません。

どうすればいいのか

503さえ返せれば、タイムアウトを待たずにそのインスタンスを無視できます。

単純な方法として、VPSを借りてDNSをそちらに書き換えた上でそこから503を返す方法がありますが、このためにわざわざVPSを借りるのは勿体無いと感じます。より簡単に503エラーを返す方法はないのでしょうか。

調べていると、httpstatusというサイトを見つけました。これは、URLに応じて指定したhttpステータスコードの応答を返してくれるサイトです。https://httpstat.us/503とすれば503を返してくれるわけですね。

ここまで出来れば、後はCloudflareであればpage ruleで、このURLへの302リダイレクトを設定すれば良いはずです。

本来は自分で503を返すべきですが、それでも応答を全く返さず放置するよりはこういったサービスを借りてでも503を返したほうがマシだと思います。

ちなみに、Page Ruleは一度登録しておけば、簡単にONとOFFの切り替えができます


最後まで読んでいただきありがとうございます。コメントフォームは設置していません。訂正・意見・感想などはTwitter(@cosnomi)などへお願いします。
記事一覧へ