環境: AWS EC2 上のセルフホスト型 Discourse、Ubuntu 24.04 AMI を使用。ホストは r7g.large (vCPU 2 基、RAM 16GB)。Discourse のバージョンは 3.6.0.beta1-dev (db974047e4) で、定期的に更新されています。WordPress はバージョン 6.8.2、wp-discourse プラグインはバージョン 2.5.9 です。WordPress と Discourse は両方とも Cloudflare の背後でプロキシ (“オレンジ色のクラウド”) されています。
現在の wp-discourse 設定: すべてのトピックで Discourse コメントを表示するように設定しており、「Ajax でコメントを読み込む」にチェックを入れています。(読者と WordPress サイトの所有者の両方が、新しいコメントを WP 投稿の直下にできるだけ早く表示したいと考えているため、所有者の要件に従い、「Ajax でコメントを読み込む」を有効にしたままにしておきたいと考えています。)
確認していること: 一般的に、wp-discourse はうまく機能しています。読者が WP 投稿にアクセスすると、ブラウザは /wp-json/wp-discourse/v1/discourse-comments?post_id=XXXXX (XXXXX は期待される投稿 ID) をリクエストし、コメントは問題なく読み込まれます。新しいコメントは、Discourse に投稿されてから数秒以内に WordPress 側で表示されます。
しかし、訪問者のブラウザは、サイト上のあらゆる WordPress アドレスにアクセスした際にも、同じ discourse-comments URI に対してリクエストを発行しています。サイトのホームページ、コメントアーカイブ、「会社概要」ページ、お問い合わせページ、著者紹介ページ、静的ページ、検索ページなど、すべてです。これらのリクエストはすべて /wp-json/wp-discourse/v1/discourse-comments?post_id=undefined に対して行われており、24 時間で約 20,000 件発生しています (これは、提供された総ページ数にほぼ対応しています)。
これはそれほど気にする問題ではありませんが、これほど多くの追加リクエストを処理することは、WP のオリジンサーバーにかなりの負荷をかけています。現在は管理可能ですが、このサイトは湾岸地域の気象予報サイトであり、気象イベント (特にハリケーン) の際には、通常の 20,000 件/日の閲覧数が 150 万~200 万件に跳ね上がることがあります。その際に、1 日あたり数百万件の post_id=undefined リクエストを処理するのは困難でしょう。
この問題に関連すると思われるメタでの投稿は、2019 年のスレッドのみで、そこでの回答は「ajax でコメントを読み込むのをオフにする」でした。前述したように、現在の要件では、その設定は避けたいと考えています。
以下は、代表的な undefined リクエストです。これは、サイトのホームページにアクセスした際に生成されたものです。
回避策: これらのリクエストは実際には何もしていないように見えるため、Cloudflare WAF ルールを実装して、CF レベルで空のレスポンスボディで応答するようにしました。これにより、問題の動作の影響は完全に解消されました。オリジンで undefined リクエストが表示されなくなり、CPU を無駄に消費してレスポンスを生成することもなくなりました。
質問: wp-discourse プラグインの意図された動作として、すべての WP ページに対して discourse-comments?post_id=undefined の AJAX リクエストが送信されるのでしょうか?WP 投稿 (または wp-discourse のオプションでページが有効になっている場合はページも) を実際に読み込む場合にのみ、これらのリクエストを送信する方が、もう少し安全 (または少なくとももう少し決定的) であるように思われます。
前述したように、問題の解決に役立ち、数万件の無効なリクエストの追加負荷を取り除く回避策を実装しており、安定した良い状態にあります。しかし、確認している動作が意図されたものであるかどうかを知ることができれば幸いです。


