Я настроил SSO Discourse Connect с использованием официального плагина, поэтому пользователи WordPress входят в Discourse без необходимости регистрации нового аккаунта там. Всё работает отлично, за исключением того, что каждый запрос к панели управления WordPress (админ-панель) замедляется на 10 секунд из-за тайм-аута, который я обнаружил только с помощью плагина Query Monitor.
https://{our-forum-address}/site.json cURL ошибка 28: Превышено время ожидания соединения после 10001 мс
WPDiscourse\Admin\MetaBox->discourse_request()
wp-content/plugins/wp-discourse/lib/plugin-utilities.php:516
WPDiscourse\Admin\MetaBox->get_discourse_categories()
wp-content/plugins/wp-discourse/lib/plugin-utilities.php:273
WPDiscourse\Admin\MetaBox->setup_options()
wp-content/plugins/wp-discourse/admin/meta-box.php:49
do_action('admin_init')
wp-includes/plugin.php:517
Плагин: wp-discourse
Даже если бы это работало, зачем вообще нужен такой вызов? Как я могу его отключить?
Форум и сайт находятся на разных серверах. Cloudflare отсутствует. SSL настроен через Let’s Encrypt. На тестовом окружении этой проблемы не было. Я переехал на боевой сервер, создал новый API-ключ и секрет, пытаясь решить проблему, но это не помогло.
Плагин пишет: Вы не подключены к Discourse. Проверьте правильность настроек подключения. Если проблема сохраняется, включите журналы подключения и проверьте их. …но я подключён, так как пользователи могут беспрепятственно входить на форум, просто перейдя по ссылке с его адресом.
В логах WordPress сказано:
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"От Discourse получен недопустимый ответ","http_code":"","http_body":""}
Я думал, что какая-то странная функция безопасности WordPress ограничивает работу, поэтому добавил этот код, но это тоже не помогло:
add_filter('http_request_host_is_external', [$this, 'mark_discourse_api_url_external'], 10, 3);
function mark_discourse_api_url_external($is_external, $host, $url)
{
if ($host === "{our-forum-address}") {
return true; // Разрешить запрос, указав, что хост является внешним
}
return $is_external;
}