注意事項

 一度サーバーを閉鎖すると、再び同じアドレスで建てても連合エラーを起こします。正常なやり取りができないどころか、お互いのサーバーにクラッシュしかねないほどの負荷をもたらすことがあります。

 二度と同じアドレスで建てられないことを覚悟して閉鎖しましょう。

これをしてくれていると周りが助かる一覧

事前の告知

 存在しなくなったサーバーと通信を試みることは、当然、他のサーバーにとっては余計な負担となります。サーバーとの通信を切ってもらうために、事前に告知を行うことは大事です。

 また、自分以外の誰かをサーバーに招いている場合は、他のアカウントに移動してもらう必要も出てくるでしょう。

410 Goneの設定

 使用しなくなったドメインについて、「404 Not Found(見つからないよ)」ではなく、「410 Gone(去ったよ)」という反応を返すように仕込みましょう。連合してくれていたサーバーの種類によっては、向こうの鯖缶さんの手を煩わせる前に配送停止処理が行われることがあります。

 ドメインの有効期限と共にサーバーを閉鎖してしまうと、この410を設定する先がなくなってしまうため、できればドメインの有効期限に余裕を持ってサーバーを閉鎖する計画を立てましょう。

410 Goneの返し方

ホスティングサービスを利用している場合

 少なくともHostodonについては、サービス側で410 Goneを返してくれることが確認されています。

NGINX(エンジンエックス)の設定で返す

 VPSの期限が余っていて、特に他に使う用事もない時などに使える方法です。NGINX(エンジンエックス)の設定ファイルを書き換え、SNSのプログラムではなく410 Goneを発信させます。

 Mastodon, kmyblueの場合は /etc/nginx/sites-available/mastodon に、Misskeyの場合は /etc/nginx/conf.d/(自鯖のドメイン).conf にNGINXの設定が格納されており、その内容を書き換えます。

 以下の example.com については、自鯖のドメインに置き換えてください。


server {

    listen 80;

    listen [::]:80;

    server_name example.com;

    return 410;

}

  

server {

    listen 443;

    listen [::]:443;

    server_name example.com;

    return 410;

}

 その後、NGINXを再起動することで、設定を更新させます。


systemctl restart nginx.service

Cloudflare Workersを活用して無料で返す

 Cloudflareでドメインの管理を行っている(DNS設定を行っている)場合に可能です。

 以下の記事で解説されています。

https://zenn.dev/taicat/articles/63ac4a94fe68bf

※執筆時点では無料で1日に100,000リクエストまで受けることが可能です

とのことです。(2023年9月の記事です)

大雑把な流れ

 Cloudflare Workerを作成し、編集して410を返却するようにしたものを、閉鎖したいサーバーのドメインを結びつけます。

Cloudflare Workersを作成する

 CloudFlareのDashboardを開き、Workers&Pagesの項目に移動します。「アプリケーションの作成」を押し移動、「ワーカーの作成」を押します。この時点では名前のみ変更可能なので、名前を変更し、右下の「デプロイ」ボタンを押します。

410を返すようにコードを変更する

 コードを編集するを押し、コードを全消しして、以下に差し替えます。


export default {

  async fetch(request, env, ctx) {

    return new Response('410 Gone', {

      status: 410,

      statusText: 'Gone'

    });

  },

};

 右上にある「保存してデプロイする」を押すことで、410を返すアプリケーションが保存されます。

ドメインとの紐づけを行う

 管理しているドメインのページ、左のサイドバーから「Workersルート」を選択して、割り当てるURLルールを記述します。

他の無料のサービスを組み合わせて返す

 以下の記事などで解説されています。

https://zenn.dev/cybergene/articles/6cae8d68bdd1dc4209cd

https://note.com/thetalemon/n/nacbe6ee28888

大雑把な流れ

 NetlifyやVercelなど、個人で小規模に利用する分には無料でサイトをホスティングしてくれるサービスに、GitHubで自分のアカウントにフォークした410発信用のリポジトリを登録し、そこに閉鎖したいサーバーのドメインを結びつけます。

GitHubの自分のアカウントにリポジトリをフォークする、とは

 GitHubは、gitというバージョン管理のできるシステムを採用したサービスです。本書で取り上げているプログラムも、その大半がGitHubに置かれています。

 複数のファイルから成るプログラムをまとめた場所が、リポジトリと呼ばれます。

 フォークについては、独自機能の追加などで本家から枝分かれしていったもの、と散々書いてきましたが、GitHubのリポジトリに存在する fork のボタンを押すと、自分のGitHubアカウントを持っていた場合、その時点でのコピーを持ってくることができます。そのコピーをどんどん改造して本家から枝分かれするわけです。

 今回は改造を加えるわけではありませんが、NetlifyやVercelなどのサービスの内容が基本的には「自分でコーディングしたサイトを公開する」というもので、本来他人のコードを勝手に公開するサービスではないことから、GitHubの自分のアカウントと連携し、自分のアカウントにあるリポジトリからしか登録できない仕様になっています。そこで、フォーク可能な410発信用のリポジトリを自分のアカウントにフォークしてきて、自分のリポジトリとした上で登録することになります。

Netlifyを利用する場合

https://github.com/cyber-gene/netlify-410

 上記のリポジトリでは、リンクを開いて直ぐのページ(README)にあるボタンを押すことで、フォークやNetlifyとの連携をやってくれるそうです。

 その後は、Site setting → Domain management → Custom domains から閉鎖したいサーバーのドメインを追加します。画面で指定されたDNSレコードを追加することで、ドメインへのアクセスがNetlifyに向かうように設定してください。

Vercelを利用する場合

https://vercel.com

 上記のVercelに登録し、以下のリポジトリを自分のGitHubアカウントにフォークして、連携させます。

https://github.com/eai04191/vercel-410

 Vercelの画面でAdd Project → Continue With Github、その後はvercel-410をimportしてDeployボタンを押します。

 DNSレコードについては、おそらくAもしくはAAAAでVPSサーバーと接続していたと思いますが、それをCNAMEで cname.vercel-dns.com に接続するようにします。また、Vercel側でもSettings → Domains で閉鎖したいサーバーのドメインを追加します。

06・付録・Dockerを使ったMisskeyのセットアップ

04-07・備考・鯖缶情報網構築のススメ