先日、VPSサーバーをレンタルしているConoHaでストレージ障害が出てサーバーがダウンしました。障害としては「ストレージのパフォーマンスが落ちる」というものでしたが、Kernelがエラーを吐いており、ログも保存できないレベルだったので緊急シャットダウンしてイメージコピーを開始。しかしその後で公式から先の障害が発生しているとのアナウンス。ストレージの性能が落ちてるので延々イメージ作成が終わらないしコントロールパネルから中断もできないという状態。最初からアナウンスを目にしていれば下手にシャットダウン/イメージバックアップを取らず、遅いまま運用していた方がマシだったんですが手遅れ。サーバーを落とした状態のまま再起動もままならないという状態で丸一日近くハマっておりました。
今はショップもあるのでなんらかの方法で「障害メンテナンス中」であることを告知したいなとあがいてみました。
CloudflareのDNS経由だったことが幸い
Cloudflare(クラウドフレア)は世界的なCDN(Content Delivery Network)サービスです。世界的に分散したキャッシュサーバーに画像などをキャッシュして、世界各地からのアクセスに対して高速化を図ります。しかも無料プランでも相当なことができる有り難いサービスです。キャッシングだけでなくCloudflare Tunnelというサービスで自宅などのIPアドレスを隠蔽したままサーバー公開ができたりするので、元々利用していました。本記事ではアカウント作成や基本設定などについては割愛します。do-gugan.comのDNSレコードはCloudflare管理下にあった前提となります。
DNSはCloudflareでホストされているのでこちらのAレコードやCNAMEレコードを編集して一次的に自宅のWebサーバーに振り分けて「メンテナンス中」ページを出そうかと思ってGemi兄に相談したところ、Cloudflare Workers(以下Workers)という機能を使えば自宅Webサーバーを使わずともCloudflare完結で簡単なHTMLページの表示ができるということなのでチャレンジしてみました。今後サーバーが落ちたらこの記事を自分で参照することはできませんが(笑)、誰かの役に立てばとメモを残しておきます。
Cloudflare Workersを設定する
Workersは本来WebアプリをCloudflare上にホスティングしてもらうサービスです。今回はここにペラ1枚のメンテナンス中お知らせページhtmlを作成し、対象ドメインの任意のURL(ワイルドカード指定可)アクセスをWorker上のURLに振り向ける、というものです。
Workerページの作成
ダッシュボードにログイン後、「コンピュート」セクションにある「Workers & Pages」に行き、「アプリケーションを作成する」を選択します。

次にページ作成手段の選択が出るので、「Hello Worldを開始する」を選びます。意外ですがような最低限の空ページを作る感じです。

こんな画面になるので、「morning-dust-158e」のように適当な名前がついているので、自分のわかりやすい名前に変えます(かえなくてもOK)。この画面では下のファイル内容は編集できないので、一旦そのまま「デプロイ」をクリックして先に進みます。

すると作成したWorkerの詳細ページに遷移するので、右上の「コードを編集する」をクリックしてエディター画面に行きます。

エディター画面はこんな感じ。ソースを書き換え、右のプレビューペインのリロードボタン(赤丸)をクリックするとレンダリングされたページが表示されます。

今回、左に入っている内容を全て消し、Geminiが生成した以下のようなコードに置き換えます(詳細の文言は適当に書き換えてください)。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
export default { async fetch(request) { const html = ` <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>メンテナンス中</title> <style> body { text-align: center; padding: 100px; font-family: sans-serif; background: #f4f4f4; } h1 { color: #333; } p { color: #666; } </style> </head> <body> <h1>ただいまシステムメンテナンス中です</h1> <p>現在、ご利用のサービス(ConoHa VPS)の広域障害により、アクセスができない状態となっております。</p> <p>復旧まで今しばらくお待ちください。</p> <p style="font-size: 0.8em; margin-top: 50px;">発生日時: 2026年3月26日 13:20頃〜</p> </body> </html>`; return new Response(html, { headers: { 'content-type': 'text/html;charset=UTF-8' }, status: 503 // メンテナンス中であることを示す }); } }; |

この状態で「デプロイ」をして公開ページを更新します。これで代替表示ページは完成です。
ルート設定
特定のURLアクセスをこのWorkerページにリダイレクトする設定は、全然違う画面から行います。一旦アカウントトップに戻り、ドメイン名ウィジェットから目的のドメインをクリック。左サイドバーから「Workerルート」を選び、「ルートを追加」をクリックします。

するとこんなダイアログが出ます。項目は2つだけ。

ルート
例えば、「do-gugan.com」ドメインの全てのアクセスをリダイレクトする場合は「do-gugan.com/*」とします。
「shop.do-gugan.com」というホストのみならば「shop.do-gugan.com/*」、このブログのみなら「do-gugan.com/~furuta/*」という感じで、適宜ワイルドカード(*)を組み合わせて指定します。
Worker
プルダウンでさっき作ったWorker名が出てくるので選ぶだけです。
あとは「保存」すると反映されると思います。されない場合は、DNSレコード設定で、プロキシが有効(オレンジ雲)になっているか確認します。ここがオフ(グレー雲)だとCloudflareは素通しというか生のIPアドレスを返してしまうので、Workerなどの全ての機能が反映されません。

メンテナンスが終わってリダイレクトを無効にしたい時は「Workerルート」のトップページに行って、対象のWorkerルートの横の脇にある削除ボタンで消します。
まとめ
サーバーがダウンしている時、振り分け用のサブサーバーがない時、CloudflareでDNSをホストしていれば簡単に代理ページを表示できました。
Cloudflareは無料で画像やJavaScript、CSSなどの静的ファイルをキャッシュして高速化してくれたり、SSL証明書管理が自動化されたり、自宅サーバーのIPアドレスを隠蔽して公開できたり、80/443番以外しか公開できない自宅プロバイダのWebサーバーを別ホスト名で公開できたりと自宅鯖公開勢に嬉しい機能盛りだくさんなので是非検討してみてください。
以下、サービス名がだいぶ代わってしまいましたが、過去記事です。
