Firsh
(Firsh)
2024 年10 月 31 日 11:08
1
我设置了 Discourse Connect SSO,使用了官方插件,这样我的 WP 用户就可以登录 Discourse,而无需在那里注册另一个用户。一切正常,但每次访问 WP 后台(管理区域)的请求都会因超时而延迟 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 是 letsencrypt。它在暂存环境中没有这个问题。我迁移到生产环境,创建了新的 API 密钥和密钥,试图解决这个问题但没有成功。
插件显示 您未连接到 Discourse。请检查您的连接设置是否正确。如果问题仍然存在,请启用连接日志并检查日志。 …但我确实连接了,因为用户可以通过点击包含其地址的链接无缝登录论坛。
WP 中的日志显示:
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"从 Discourse 返回了无效的响应","http_code":"","http_body":""}
我曾认为奇怪的 WP 安全设置会阻止它,所以我添加了这个但也没有用:
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;
}
angus
(Angus McLeod)
2024 年10 月 31 日 12:13
2
嘿 @Firsh ,
对您 /site.json 的调用是 WordPress 插件检索有关您的 Discourse 信息所必需的。
这意味着您没有正确连接,即使事情看起来正常,我也不会指望它们会一直正常工作。
Firsh:
创建了一个新的 API 密钥和密钥
这是我们需要关注的。您能否分享您创建的密钥类型?供参考,请确保您遵循有关此处的指南:
2 个赞
Firsh
(Firsh)
2024 年10 月 31 日 12:36
3
我认为问题不在于密钥。我之前尝试过使用暂存站点的密钥,而新的密钥显示“从未使用过”。当我尝试使用 wp_remote_request 调用我的论坛主页时,也会超时。我将其设置为“每个用户”和“全局”。
是的,但为什么在所有不相关的管理页面上都要一直调用呢?只需要在需要时调用一次就足够了。我追踪到了它的来源,是 function get_discourse_categories(),并且它被硬编码到 add_action( 'admin_init', array( $this, 'setup_options' ) ); 中。我不希望我的 WP 了解论坛的分类,我没有使用任何发布/评论功能,我只需要登录,而登录已经可以正常工作了。
我还使用 wp_remote_request() 向论坛主页发出了请求,但同样会超时。其他随机站点都可以访问。
angus
(Angus McLeod)
2024 年10 月 31 日 12:46
4
我明白您觉得 /site.json 的请求是不必要的,但是如果无法成功连接到您的 Discourse,WordPress 插件将无法可靠地为您工作,所以我们应该找出原因。\n\n1. 您能想到您的暂存环境和生产环境之间还有其他区别吗?\n2. 您能否分享您暂存和生产实例的 WP Discourse 日志元文件?\n3. 您能否分享您的 WordPress 和 Discourse 实例的链接?
1 个赞
Firsh
(Firsh)
2024 年10 月 31 日 13:17
5
是的,但这是一个匈牙利语的私人会员制网站和论坛。
论坛:https://forum.intelligensbefektetok.hu/
网站:https://intelligensbefektetok.hu/
我的暂存环境是手动创建的精确副本,尽管运行在虚拟机中的 Docker 中。生产环境不由我管理,我也不知道它是什么类型的托管,但我们以前从未遇到过任何问题,而且它之前速度很快。
我刚才尝试了:
> object(WP_Error)#5757 (3) { ["errors"]=> array(1) { ["http_request_failed"]=> array(1) { [0]=> string(59) "cURL error 28: Connection timed out after 5000 milliseconds" } } ["error_data"]=> array(0) { } ["additional_data":protected]=> array(0) { } }
其他 WordPress 网站;这个论坛;实时站点在向自身发出请求时,都工作正常。
暂存环境 WordPress 的日志:
[2024-10-31 13:09:08] connection.INFO: check_connection_status.valid_scopes
[2024-10-31 13:09:19] connection.INFO: check_connection_status.successful_connection
[2024-10-31 13:09:19] connection.INFO: check_connection_status.valid_scopes
生产环境日志与我在 OP 中的相同:
[2024-10-31 13:12:32] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":"","http_body":""}
直接在浏览器中加载时,此链接可以正常工作:
https://forum.intelligensbefektetok.hu/site.json
另外,感谢您的帮助。
angus
(Angus McLeod)
2024 年10 月 31 日 13:38
6
Firsh:
生产环境不由我管理,也不知道是什么类型的托管
您是指 WordPress 生产环境还是 Discourse 生产环境?您的 Discourse 生产环境中是否有某些东西在执行重定向和/或更改(或剥离)请求中的标头?
Angus McLeod:
如果您能分享这两个实例的元文件,那将会有所帮助。请在“日志”管理面板中点击“查看元文件”。
这可能是根本问题。如果您的 WordPress 完全无法访问您的 Discourse,连接将无法工作。如果您能够轻松测试此连接性,我建议您在对论坛的网络层进行任何调整时继续进行此测试,直到您收到 403(即未经授权)为止。
我的直觉是这是一个网络层问题,可能是重定向或防火墙。
Firsh
(Firsh)
2024 年10 月 31 日 13:59
7
没有预演的 Discourse,两个站点都使用相同的实时 Discourse(相同的用户 ID 等)。我在另一个帖子中问过这个问题,应该没问题。论坛的网络层非常简单,托管在 Hetzner 上,在 VPS 中使用官方 Docker,论坛几乎没有使用或自定义过,除了视觉方面。我不知道有什么设置会阻止它被访问。我已联系 WP 托管公司创建一个工单,看看他们是否能找出连接失败的原因,因为我更担心他们不寻常的设置。
对我来说有趣的是,仅仅是论坛可以访问 WP(而不是反过来)就“足够”实现有效的 SSO。除了注销论坛用户之外。
日志 (实时站点下载了一个 0 字节的 ZIP)。
angus
(Angus McLeod)
2024 年10 月 31 日 14:33
8
是的,我也会先等待这个结果,否则我们可能会在这里白费力气。基本问题是为什么标准的 WP 请求无法连接到您的论坛。