
洪 民憙 (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)セクションにも詳しく説明があります。
