Cloudflare Workersを用いて無料で410 Goneを返す方法
MisskeyなどのFediverse系サーバーをホストし、運営を終了する際に410 Goneのレスポンスを返すことで連合しているサーバーに配送しなくてよい旨を伝えることが出来ます。
しかしながら、VPS等を利用していて経済的な理由が原因でサーバーを閉じる場合などサーバーから410レスポンスを返すことが難しい場合も多々あると思います。
ここではCloudflare Workersを利用して無料で比較的簡単に410 Goneを返す方法をご紹介します
※ここではMisskeyなどActivityPub系ソフトウェアを前提に話しましたがどのようなサイトでも設定可能です
前提
Cloudflareを用いてDNSの管理をしていること
(ActivityPub系ソフトを利用している場合、一度設定すると連合先では解除しない限り配送停止されます)
※執筆時点では無料で1日に100,000リクエストまで受けることが可能です
実際の手順
手順はざっくり、
- Workerの作成
- 編集して410を返却するようにする
- ページと紐づけをする
になります。
では、実際に設定していきましょう。
Workersを作成する
- CloudFlareのDashboardを開く
- Workers&Pagesの項目に移動する
- 「アプリケーションの作成」を押し移動、「ワーカーの作成」を押す
ここまで行うと次のような画面が表示されると思います
この時点では名前のみ変更可能なので、名前を変更し、右下の「デプロイ」ボタンを押します。
410を返却するように変更する(簡単なレスポンス)
上の手順が終わると、「おめでとうございますワーカーはリージョンにデプロイされます」といった表示が出ると思います
このまま、コードを編集するを押し、コードを変更しましょう。
表示されているコードがありますが、全て消して以下のコードに差し替えます
export default {
async fetch(request, env, ctx) {
return new Response('410 Gone', {
status: 410,
statusText: 'Gone'
});
},
};
このように赤い丸と410の表示があれば410を返すWorkerの完成です。
右上にある「保存してデプロイする」を押すことで410を返すアプリケーションが保存されインターネットで利用可能になります。
ドメインとの紐づけを行う
※この手順を行う前にCloudflareのDNSを利用していて、Cloudflareでプロキシ済みになっていることを確認してください
画像ではCNAMEが登録されていますが、AレコードやAAAAレコードでも大丈夫だと思います。
- CloudFlareのDashboardを開き、管理しているドメインのページに飛びます。
- 左のサイドバーから「Workersルート」を選択してWorkersルートを設定する画面に飛びます。
- 「ルートを追加」を選択して、割り当てるURLルールを記述します。(以下の画像は410.nadesskey.com全体に割り当てる例)
- 保存をすれば、指定したアドレスから410のレスポンスが返るはずです。
少しカスタムしたHTMLを返す
次のようにHTMLを渡すことなども可能なので工夫次第でカスタム410ページを作成できると思います
export default {
async fetch(request, env, ctx) {
const html = `<!DOCTYPE html>
<body>
<h1>410 Gone</h1>
<p>This page is gone.</p>
</body>`;
return new Response(html, {
headers: {
"content-type": "text/html;charset=UTF-8",
},
status: 410,
statusText: 'Gone'
});
},
};
この際、ヘッダーにHTMLを返していることを入れたりしています。
さいごに
このようにして、無料で410 Responceを返却することができます。
CloudflareのDNSを利用していれば利用可能なのでぜひ試してみてください。
無料枠は100,000リクエストまでなので
- 連合しているサーバーが多い
- 他にWorkerを利用している
などの場合は他のサービスや縮小したWebサーバーを用意して410を返すようにすることも検討したほうがいいかもしれません。
お一人様サーバーや小規模サーバーの場合はこれで十分という場合も多いと思うので、是非活用してみてください!
Misskeyサーバーなですきーを運営していたりもします
小規模なサーバーですがこちらもよければどうぞ! @taichan@mi.taichan.site
Discussion