2.4.0.beta9 から 2.4.0.beta10 への更新で Cloudflare Rocket Loader によりコンテンツのないページが表示される

今朝、ワンクリックでブラウザをアップグレードするというメール通知が届き、いつもの通り実行しました。完了後、フォーラムに戻ると、期待通りの背景とヘッダー画像が表示されるものの、他のコンテンツは一切表示されない空白のページが表示されるだけです。

/var/discourse に移動して ./launcher rebuild app を実行すると、期待通りに動作しますが、フォーラムサイトは依然として同じ動作(ヘッダー画像と背景は表示されるがコンテンツは表示されない)を示します。

お手伝いいただけませんか?

ソースを表示すると、少なくとも一部のコンテンツは存在しているようですが、表示されていません。2.4.0.beta9 と現在のビルドの間に変更は加えられていません。

ブラウザのコンソールにエラーは表示されていますか?(右クリックして要素を検査し、コンソールタブを開いて確認してください)

はい:

Content Security Policy のディレクティブ「script-src ‘report-sample’ https://forums.stillwellaudio.com/logs/ https://forums.stillwellaudio.com/sidekiq/ https://forums.stillwellaudio.com/mini-profiler-resources/ https://forums.stillwellaudio.com/assets/ https://forums.stillwellaudio.com/brotli_asset/ https://forums.stillwellaudio.com/extra-locales/ https://forums.stillwellaudio.com/highlight-js/ https://forums.stillwellaudio.com/javascripts/ https://forums.stillwellaudio.com/plugins/ https://forums.stillwellaudio.com/theme-javascripts/ https://forums.stillwellaudio.com/svg-sprite/ https://www.google-analytics.com/analytics.js」に違反しているため、スクリプトhttps://ajax.cloudflare.com/cdn-cgi/scripts/7089c43e/cloudflare-static/rocket-loader.min.js’ の読み込みが拒否されました。‘script-src-elem’ が明示的に設定されていないため、フォールバックとして ‘script-src’ が使用されています。

20 リソース が link preload を使用してプリロードされましたが、ウィンドウのロードイベントから数秒以内に使用されませんでした。適切な as 値が設定されていること、および意図的にプリロードされていることを確認してください。

Cloudflare の JavaScript の「最適化」は、Discourse サイトで定期的に問題を引き起こします。Cloudflare アカウントにログインし、フォーラムのドメインを「オレンジの雲」から「グレーの雲」に変更してください。

簡単な修正ですね、ありがとうございます。Cloudflare の DDoS 保護や IP アドレスの隠蔽機能すべてを回避してしまうのは残念ですが、変更することで動作するようになりました。問題について Cloudflare のサポートに連絡して報告します。

Cloudflare が自動的にできることはあまりないと思います。Rocket Loader を CSP で許可するための手順はあります。ただし、Discourse の JavaScript はすでに十分に最適化されているため、Rocket Loader は必須ではありません。

Cloudflare の設定画面に行けば、Rocket Loader を個別に無効化できるはずです。その後、プロキシを再度有効にすると、CSP エラーは消えるでしょう。

多くのユーザーにとっては Cloudflare を完全に無効化する方が簡単ですが、DDoS 保護が本当に必要な場合は、以下の手順で設定できます:Full site CDN acceleration for Discourse

確認済み:Rocket Loader の無効化とプロキシの再有効化も同様に機能します。それは良い妥協点ですね、ありがとうございます!

念のため申し上げますが、オレンジ色のクラウドをオフにする必要はありません。「パフォーマンスを無効化」するページルールをサイト全体に設定して、クラウドをオンにしたままにすることも可能です。

Cloudflare の DDoS 保護は、最適化機能とは連動していません。

とはいえ、クラウドをオンにしたままにすると、すべてのリクエストが遅くなります。そのため、DDoS 保護が本当に必要ない場合や、CDN を利用しないのであれば、オフにしておくことをお勧めします。

私は Cloudflare の Argo スマートルーティングやその他のパフォーマンス機能を利用しており、一般的にはパフォーマンスが明らかに向上します。ただし、主にそのドメインのメインサイトに対してであり、フォーラムへの影響は限定的です。メインサイトこそが顧客に製品を購入してもらうための窓口であり、高速であるほど有利です。ともあれ、特定の最適化機能(Rocket Loader)を無効にすることで、プロキシの背後で Discourse が正常に動作するようになります。これは適切な妥協点だと思います。ありがとうございます!

2.4.0 ベータ 10 へのアップグレード後に同様の問題が発生しています。

https://www と https://(www なし)の両方のバージョンを持っています。

https://www 版は正常に動作します。

https:// 版は Chrome と Safari で白紙になり、コンソールに多数のエラーが表示されます。

スクリプト ‘’ の読み込みが拒否されました。これは、次のコンテンツセキュリティポリシーディレクティブに違反しているためです: “script-src ‘report-sample’ ”。‘script-src-elem’ が明示的に設定されていないため、‘script-src’ がフォールバックとして使用されています。

スクリプト ‘https://dastereo.ru/assets/locales/ru-2fae24b4e1db72deb2076bee15794ed9e0a6814a5bf52d778e29c106812aaa6c.js’ の読み込みが拒否されました。これは、次のコンテンツセキュリティポリシーディレクティブに違反しているためです: “script-src ‘report-sample’ https://www.dastereo.ru/logs/ https://www.dastereo.ru/sidekiq/ https://www.dastereo.ru/mini-profiler-resources/ https://www.dastereo.ru/assets/ https://www.dastereo.ru/brotli_asset/ https://www.dastereo.ru/extra-locales/ https://www.dastereo.ru/highlight-js/ https://www.dastereo.ru/javascripts/ https://www.dastereo.ru/plugins/ https://www.dastereo.ru/theme-javascripts/ https://www.dastereo.ru/svg-sprite/ https://www.google-analytics.com/analytics.js”。‘script-src-elem’ が明示的に設定されていないため、‘script-src’ がフォールバックとして使用されています。

簡単な解決策はありますか?

2 つのドメインで同時にサイトを実行することはサポートされていません。この特定のエラーを修正するにはコンテンツセキュリティポリシーを無効化することもできますが、推奨はしません。

最も良い方法は、一方のドメインをもう一方にリダイレクトすることです。

Cloudflare もご利用ですか?ご利用の場合は、2 つのページルールを使用して以下からリダイレクトできます:

http://example.com/* :right_arrow: https://example.com/$1
https://example.com/* :right_arrow: https://www.example.com/$1