Discourse のサイト全体の CDN 高速化

CDN 技術について質問があります。

CDN は自サイトのファイルのみをキャッシュでき、他サイトからホットリンクされたファイルはキャッシュできない、という理解で正しいでしょうか?

カタログファイル(MP3 と画像)を別のサーバーに保存し、Discourse サイトでホットリンクしています。このようなファイルも CDN によってキャッシュされないという理解で正しいでしょうか?また、ホットリンクされたファイルもキャッシュする方法はありますか?

Discourseにその設定を無効にしない限り、リモート画像は自動的にDiscourse自身の画像ストアに取得されます。以下は、その設定を無効にしたことを前提としています。

そのサイトをCDNの背後に配置し、DiscourseにはCDNのURLを共有してください。

画像サイトの前面にCDNを配置しましたが、DiscourseにはオリジンURLを共有している場合、組み込み機能を使ってオリジンURLをCDNURLに置き換えることができます。

「いいね!」 2

CDN 機能を Discourse で有効にし、元のリソースを Discourse に保存しないように設定した場合、CDN サービスが外部ファイルをキャッシュし、Discourse が他サイトから直接リンクされたファイルへのすべてのリンクを置き換えるという理解で正しいでしょうか?

他サイトから直接リンクされた外部ファイルをキャッシュできるのかどうかは疑問です。これについて確認できる方はいますか?

参考情報として、AWS CloudFront を使用してサイト全体の CDN 加速(および SSL 終端)を設定する方法に関する新しいスレッドをここに投稿しました(リンクは以下)。ここには「ドラゴン」が潜んでいますので、慎重に進めてください。

「いいね!」 1

エラー Reason: CORS header ‘Access-Control-Allow-Origin’ missing が発生した場合、それでも必要ですか?

Githubでその変数を使用しているものを見つけることができませんでした。


編集:設定コメントにはまだ必要と書かれており、追加すると機能します。なので、これで受け入れます :slight_smile:

現在2023年ですが、以下の4つのルールは依然として厳密に従う必要がありますか?例えば、CDNでメインドメイン名を高速化するように設計されたAkamaiを使用する場合、メッセージバスやロングポーリングはまだオリジンにリクエストする必要がありますか?これらの設定はどこに行うべきですか?ロングポーリングのベースURLは管理ダッシュボードから削除されたようですが?

「いいね!」 2

ドメインが異なる場所からMessage Busリクエストを処理するための高度な設定がありますが、非常に複雑です。

「いいね!」 1

「long polling base url」は、管理ダッシュボードから削除されたため、Railsコンソールを通じて設定する必要があります。サイトがフルサイトCDNモードで正常に動作するために設定が必要な理由がどこかに記載されていたのを、見逃したのかもしれません。

同様に、DISCOURSE_ENABLE_CORS: true は app.yml で設定する必要があります。

app.yml の環境変数 (DISCOURSE_LONG_POLLING_BASE_URL) で設定する必要があります。設定する必要がある人は非常に少なく、設定する場合はその方法を理解していると想定されるため、これは非表示になっています。

「いいね!」 1

ありがとうございます、@pfaffman!これらの大文字の変数はすべて app.yml に入れるべきだと気づくべきでした。
では、メッセージバスのユースケースはどのように有効になりますか?例えば、通知などを引き起こす投稿への返信などですか? DISCOURSE_LONG_POLLING_BASE_URL を設定せずに、私のサイトでメッセージバスが期待どおりに機能しているかどうかを確認するためにユースケースのテストを実行します。

こんにちは。
「long polling base url」は管理ダッシュボードから削除されましたか?それとも、この設定はRailsコンソールから行うことができますか?

long_polling_base_url は非表示のサイト設定ですが、app.yml で環境変数を使用していない場合は、rails コンソールから設定できます。

「いいね!」 3

このリストは、Discourse に関するより多くの洞察を与えてくれます。
CDN をウェブサイトに設定し、エッジキャッシュに到達しましたが、まだメッセージバスの問題とその応答ヘッダーを経験していませんが、まだ確実ではありません。CORS 設定も行っていません。

Cache-Control: must-revalidate, private, max-age=0

こんにちは、
別のスレッド Full Site CDN Using AWS CloudFront - #2 by Hyan で質問を投稿しました。同じ設定を行い、#DISCOURSE_CDN_URL: https://discourse-cdn.example.com を変更せずにそのままにしました。これをウェブサイトと同じURLに設定できますか?たとえば、http://forum.example.com です。そうでなければ、ドメイン名のない相対パスでアセットURLが存在します。
@sam または @pfaffman がヒントを教えていただけると幸いです。

CDNとしてCloudflareを使用することは推奨しません。一部のユーザーは使用しています。彼らが役立つかもしれません。

編集:ああ、すみません。これは「サイト全体CDN…」です。おそらく私はここに貢献すべきではありません。

いいえ、動的コンテンツのキャッシュをサポートするAkamai CDNを使用しています。
このスレッドの最初の投稿から、URLがウェブサイトのURLと同じであっても、フルサイトCDNではないDISCOURSE_CDN_URLを設定する必要があるようです。設定するとサイトが壊れたり、元に戻せない結果になったりしないか、最終的にソフトウェアを最初から再インストールしなければならないのではないかと心配しています。この投稿 Full Site CDN Using AWS CloudFront では、著者は設定せずDISCOURSE_CDN_URLを変更せず、message-bus/long-pollingを提供するために別のURLを必要としません。私はこのソリューションを使用しており、これまでのところ私のウェブサイトは正常に動作しています。このソリューションの唯一の欠点は、ページソースに多くの相対URL(ベースURLなし、DISCOURSE_CDN_URLの値は空)が表示されることで、本番レベルのウェブサイトのように見えないことです。

質問のフォローアップですが、この投稿で尋ねているのと同様の投稿を見つけました。CloudFront not caching static files - #4 by Falco
@Falco の回答に感謝します。このフルサイト CDN セットアップで、DISCOURSE_CDN_URL を DISCOURSE_HOSTNAME と同じに設定できますか?フルサイト CDN は CDN がホスト名の URL を加速することを意味すると想定しているため、DISCOURSE_CDN_URL は DISCOURSE_HOSTNAME と同じになります。しかし、メタにはこれに関するまともなドキュメントがありません。

うさぎのテンプレートはありますか?

それにはテンプレートは不要です。バニーをディスコースサイトからプルするように設定し、app.yml で DISCOURSE_CDN_URL をバニー提供の CDN エンドポイントに設定するだけです。

「いいね!」 1

VPSのIPアドレスとBunny DNSで「CDNアクセラレーション」として試しています。動作はしますが、すべてのユーザーが同じIPアドレスになってしまいます。

設定を見つけました。「X-Real-Ip」という名前です。