皆さん、こんにちは。
Discourse インスタンス(標準の Docker インストール)で、5MB を超える動画を投稿すると Onebox プレビューが生成されないという特定の問題に直面しています。同じ動画リンクは、他の Discourse サイトでは完全に機能します。
問題点:
動画リンク(例:5.1MB の .webm ファイル)を投稿すると、Onebox は失敗します。この問題を、Range リクエストのネゴシエーションの失敗に絞り込みました。
Rails コンソールからのデバッグ結果:
- 手動 Ruby テスト(成功): 標準の
Net::HTTPを使用し、Range: bytes=0-10ヘッダーを手動で設定すると、ソースサーバーから 206 Partial Content を正常に取得できます。 - Discourse システムテスト(失敗): Discourse が
FinalDestination.new(url).getを介して同じ URL をフェッチしようとすると、206 の代わりに 200 OK (Net::HTTPOK) を受信します。その結果、ファイル全体をダウンロードしようとし、5MB のMAX_REQUEST_SIZE_BYTES制限に達し、Onebox は「サイズが大きすぎる」エラーで失敗します。
すでにテストした設定ですが、問題は解決しませんでした:
onebox_user_agentにブラウザライクな文字列を設定した。- ソースドメインを
force_custom_user_agent_hostsに追加した。 - サーバーにグローバルプロキシが設定されていないことを確認した(
env | grep -i proxyは空である)。 - 他の Discourse インスタンスで同じ URL をテストしたが、それらは完璧に Onebox された。
質問:
なぜ、同じネットワーク上で、全く同じ URL を指しているにもかかわらず、ある Discourse インスタンスだけが Range リクエスト (206) のネゴシエーションに失敗するのでしょうか?
Range ヘッダーが削除されたり、リモートサーバーが完全な 200 レスポンスにフォールバックしたりする原因となる、特定の内部設定、セキュリティミドルウェア、または FinalDestination のロジックはありますか?
何か洞察や次に確認すべき点のヒントをいただけると大変助かります!