洪 民憙 (Hong Minhee) 
@hongminhee@hollo.social · Reply to モナコ広告 :fedibird1: @技術・雑談's post
@monaco_koukoku この問題はx-forwarded-fetchミドルウェアが設定されていないために発生しています。
詳しく説明させていただきますと:
fedify tunnelは、ローカルのHTTPサーバーをHTTPSで外部に公開するリバースプロキシとして動作します。- この過程で、元々のHTTPSリクエストはHTTPに変換されてローカルサーバーに転送されます。このとき、元のプロトコルとホスト情報は
X-Forwarded-ProtoおよびX-Forwarded-Hostヘッダーに含まれて転送されます。 - しかし、x-forwarded-fetchミドルウェアが設定されていない場合、Fedifyはこれらのヘッダーを認識できず、直接受け取ったHTTPリクエストのURLのみを参照することになります。
- その結果、
ctx.url.hrefがhttps://ではなくhttp://で始まるURLとなり、生成されるActorオブジェクトのURLもすべてhttp://から始まるものになってしまいます。
解決方法としては、以下のようにx-forwarded-fetchミドルウェアをインストールして適用する必要があります:
import { behindProxy } from "x-forwarded-fetch";
serve({
fetch: behindProxy(request => federation.fetch(request, { contextData: undefined }))
});
このように設定することで、FedifyがX-Forwarded-*ヘッダーを正しく認識し、https://のURLを生成するようになります。
また、この問題についてはFedifyの公式ドキュメントの「ローカルサーバーを外部に公開する」(Exposing a local server to the public)セクションにも詳しく説明があります。
@技術・雑談