Среда: Самостоятельно размещённый Discourse на AWS EC2 с образом Ubuntu 24.04 AMI. Хост — r7g.large с 2 vCPU и 16 ГБ ОЗУ. Версия 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 поста, и комментарии загружаются без проблем. Новые комментарии появляются на стороне WordPress в течение нескольких секунд после публикации в Discourse.
Однако браузеры посетителей также отправляют запрос к тому же URI discourse-comments при посещении любого адреса WordPress на всём сайте. Главная страница сайта, архивы комментариев, страница «О нас», страница контактов, страницы с биографией авторов, статические страницы, страницы поиска — всё. Все эти запросы содержат post_id=undefined, и за 24 часа я получаю около 20 000 таких запросов (что примерно соответствует общему количеству отданных страниц).
Меня это не слишком беспокоило бы, если бы обработка такого количества дополнительных запросов не создавала заметной нагрузки на мой исходный сервер WP. Сейчас это ещё управляемо, но этот сайт занимается прогнозированием погоды на побережье Мексиканского залива, и во время погодных явлений (особенно ураганов) количество ежедневных просмотров может вырасти с обычных ~20 тысяч до 1,5–2 миллионов, и обработка миллионов запросов с post_id=undefined в день стала бы серьёзной проблемой.
Единственное, что я нашёл здесь, на meta, что связано с этой проблемой, — эта тема от 2019 года, где предложенный ответ: «отключить загрузку комментариев через Ajax». Как отмечено выше, учитывая условия, в которых я работаю, я бы предпочёл этого не делать.
Вот примерный запрос с undefined. Этот запрос был сгенерирован при обращении к главной странице сайта:
Обходное решение: Поскольку эти запросы, похоже, на самом деле ничего не делают, я реализовал правило WAF в Cloudflare, которое отвечает на них на уровне CF пустым телом ответа. Это полностью устранило последствия описанного поведения — я больше не вижу запросов с undefined на своём исходном сервере и не трачу процессорное время на генерацию ответов.
Вопрос: Является ли отправка ajax-запросов discourse-comments?post_id=undefined для каждой страницы WP ожидаемым поведением плагина wp-discourse? Казалось бы, было бы безопаснее (или, по крайней мере, более детерминированным) отправлять такие запросы только при загрузке поста WP (или страницы, если в настройках wp-discourse включена поддержка страниц).
Как я уже сказал, у меня есть работающее обходное решение, которое, похоже, справляется с задачей и устраняет лишнюю нагрузку от обработки десятков тысяч ложных запросов, так что я стабилен и в хорошем положении. Но было бы приятно узнать, является ли наблюдаемое мной поведение задуманным.


