ドメイン分離 WebFinger
Holloはドメイン分離 WebFingerの設定をサポートしています。
フェディバースのハンドルは1つのドメイン(例: @alice@example.com)
にあり、実際のActivityPubサーバーは別のドメイン
(例: https://ap.example.com)で動作する形式です。
Mastodonが「ルートドメインでのWebFingerホスティング」
として説明し、GoToSocialがhost-metaベースのホストスワッピングと
呼ぶパターンと同じです。
この機能は Fedifyの origin オプション の上に実装されています。
なぜドメインを分離するのか?
Section titled “なぜドメインを分離するのか?”典型的な動機は、すでに短くて良いドメイン(example.com)を持っていて、
ハンドルを@alice@example.comのように見せたいけれども、そのドメインの
ルートにHolloを置くわけにはいかない場合です。ルートドメインは
ホームページや別のWebアプリ、既存サービスが使っていることが多いものです。
ドメイン分離設定では:
- ユーザーはフェディバースのどこでも
@alice@example.comという 形で呼んでくれます。 - Hollo自体は
https://ap.example.comで動作します。Web UI、 Mastodon互換 API、OAuth、アクターURIはすべてこちらにあります。 - ルートドメイン
example.comはたった一つの仕事をすればよいです:/.well-known/webfingerリクエストをap.example.comに リダイレクトすることです。
以下の2つの環境変数をHolloインスタンスに設定してください:
HANDLE_HOST— ハンドルに使う ホスト名のみ(スキームなし、パスなし)。例:example.com。WEB_ORIGIN— Holloが実際に 動作するスキーム+ホスト。例:https://ap.example.com。
両方を一緒に設定する必要があります。片方だけ設定するとHolloは 起動に失敗します。
HANDLE_HOST=example.comWEB_ORIGIN=https://ap.example.comこれで残りはFedifyが処理してくれます:
- WebFingerレスポンスの
subjectはacct:alice@example.com。 - アクターURIは
https://ap.example.com/@aliceの形式で構築されます。 - Mastodon互換の
/api/v1/instance、/api/v2/instanceエンドポイントは インスタンスドメインをexample.comとして返すため、クライアントは 正しいハンドルを表示します。
リバースプロキシのリダイレクト
Section titled “リバースプロキシのリダイレクト”Hollo自体はWEB_ORIGINホストでしかリッスンしません。
リモートサーバーが@alice@example.comを解決する際は
https://example.com/.well-known/webfingerにWebFingerクエリを
送るので、そのドメインのリバースプロキシでHolloへリダイレクト
させる必要があります。
クエリ文字列を保持する301リダイレクトで十分です。
一部の実装はディスカバリ時に/.well-known/nodeinfoと
/.well-known/host-metaも探るので、これらも一緒に
リダイレクトしておくのが良いでしょう。
server { listen 443 ssl; server_name example.com; # … 通常のサイト設定 …
location /.well-known/webfinger { return 301 https://ap.example.com$request_uri; } location /.well-known/nodeinfo { return 301 https://ap.example.com$request_uri; } location /.well-known/host-meta { return 301 https://ap.example.com$request_uri; }}example.com { # … 通常のサイト設定 …
redir /.well-known/webfinger* https://ap.example.com{uri} permanent redir /.well-known/nodeinfo* https://ap.example.com{uri} permanent redir /.well-known/host-meta* https://ap.example.com{uri} permanent}/@usernameパスやアクターURLはリダイレクト不要です。
これらのURLはap.example.com上にあり、リモートサーバーは
WebFingerレスポンスを解決した後そちらに直接アクセスします。
デプロイ後、次の3つを確認すればすべて正しく接続されていることが わかります:
-
ハンドルドメインからのWebFingerがリダイレクトされるか:
curl -i "https://example.com/.well-known/webfinger?resource=acct:alice@example.com"https://ap.example.com/.well-known/webfinger?...への301を 返す必要があります。 -
サーバードメインからのWebFingerが応答するか:
curl "https://ap.example.com/.well-known/webfinger?resource=acct:alice@example.com"subjectがacct:alice@example.comで、selfリンクがhttps://ap.example.com/@aliceを指すJRDが返ってくる必要があります。 -
インスタンスエンドポイントがハンドルドメインを返すか:
curl https://ap.example.com/api/v2/instance | jq .domain"example.com"が出力されるはずです。
より入念に監査したい場合は、Julian Fietkau の WebFinger Canary を ハンドルドメインに対して実行してみてください。現在 Mastodon と Fedify ベースのサーバーはドメイン分離設定を正しく扱えますが、 Misskey と Pixelfed は今のところそうではありません。