无法连接 Discourse 和 WordPress

I’m facing an issue while connecting Discourse to WordPress using the Discourse Plugin. I’m running Discourse on a Digital Ocean droplet. The setup was performed exactly as mentioned here (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub). The droplet itself sits behind CloudFlare and HTTPS was setup using Let’s Encrypt (using Set up HTTPS support with Let's Encrypt). The WordPress site is deployed on SiteGround, also behind CloudFlare.

When I add the forum’s root address, API key and administrator username in the plugin settings, in WordPress’ console, it still keeps saying “You’re not connected to Discourse”. Upon further investigating I’ve found that this particular request /site.json%20?api_key=[FILTERED]&api_username=<username> is returning 403 Forbidden even with a fresh, valid API Key and a valid administrator username.

The request to site.json is checking that an API request can be made with the values supplied for the API Key and Publishing Username that are set on WordPress. If you make the request with curl from your local computer, is it working for you? For example, this request with $api_key set to your API key:

curl -X GET 'https://forum.example.com/site.json?api_key=$api_key&api_username=system'

If this is woking for you, you could try installing the WordPress Health Check plugin and looking at the Secure communication row on the Site Status tab to see if it’s finding any issues with communicating with external services using secure connections (SSL.)

This curl command works perfectly fine

curl -X GET "https://community.worldbrain.io/site.json%20\?api_key\=blabla\&api_username\=bla"

Health Check mentions Your WordPress install can communicate securely with other services.

Here is what I’m seeing in HTTP API Calls section

Of course the forum itself is working so it’s pretty bizarre to see Could not resolve host

Can I ask how have you installed SSL on your discourse? Is it a generic cloudflare certificate or something?

Edit:
Indeed it’s cloudflare https://www.whynopadlock.com/results/df748a55-67d9-4477-9502-c618b69cb38c

And I’m assuming you’re running their “Flexible” SSL mode. This explains a lot about why the calls are messed up.

我遇到了同样的错误。请帮忙!

我执行了该操作,结果如下:

curl -I GET 'https://forum.fususu.com/users/mrsusu.json?api_key=[secretapi]&api_username=mrsusu'

HTTP/1.1 403 Forbidden
Server: CloudFront
Date: Sat, 29 Jun 2019 19:00:27 GMT
Content-Type: text/html
Content-Length: 556
Connection: keep-alive
X-Cache: Error from cloudfront
Via: 1.1 dfb4b390f0fb83a73bab72d387a3e1dc.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: NRT20-C3
X-Amz-Cf-Id: qO_fq0M_GX8wUuqJFCpBDXL6dlJDkKVWJ-BKOSD6qfegOqdNr_837g==

HTTP/1.1 200 OK
Date: Sat, 29 Jun 2019 19:00:28 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Set-Cookie: __cfduid=de8f93857163fcf3bfca002a5af11f38c1561834828; expires=Sun, 28-Jun-20 19:00:28 GMT; path=/; domain=.fususu.com; HttpOnly; Secure
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
X-Discourse-Username: mrsusu
X-Discourse-Route: users/show
Cache-Control: no-cache, no-store
X-Request-Id: 2a4e74b8-3be0-47cf-81e9-fc5682e678c5
Set-Cookie: __profilin=p%3Dt%2Ca%3Dee922625e907ef0b48cfd16cc80c816b%7C20b0d8cc0a038e5816c59c085fca59e5; path=/; secure; HttpOnly

X-Runtime: 0.114832
Strict-Transport-Security: max-age=31536000
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 4eea24bb28432e07-NRT

我的 WordPress 站点 fususu.com 配置为:SSL 灵活模式(Cloudflare),
并为论坛 forum.fususu.com 设置了页面规则:完整 SSL(Cloudflare)。

您能成功运行这个吗?

还没有……我暂时放弃了 ^^!

你成功解决这个问题了吗?我的配置和你一样(Digital Ocean 上的 Discourse,Siteground 上的 WordPress,两者都在 Cloudflare 后面),也遇到了同样的错误。在我的本地机器上,Curl 运行正常。

有什么建议吗?

您在 Cloudflare 端的 SSL 是如何配置的?您是否在 Discourse 上启用了 Cloudflare 的性能优化?

您确实应该将 Cloudflare 的 SSL 设置为“完全(Full)”模式,而不是“灵活(Flexible)”模式。

如果您在 Discourse 上启用了 Cloudflare 的性能优化,请通过创建页面规则将其禁用。

如果这没有帮助,请分享您的 Discourse 域名。

URL 为 https://discuss.guidery.com

“discuss”子域名的性能和安全性已通过页面规则禁用。
SSL 设置为“完整(严格)”。

我看到的错误信息是“cURL 错误 6:无法解析主机:discuss.guidery.com”,该错误由 WP Query Monitor 插件报告。

在本地机器上执行相同的 cURL 命令则没有问题。

WordPress 端是否有防火墙规则阻止了连接?

当我 SSH 登录到共享服务器(由 SiteGround 托管)并手动运行 curl 命令请求我的 Discourse 安装时,我收到了相同的错误消息;

“curl: (6)” 无法解析主机:discuss.guidery.com"。

我甚至创建了一个新的 WordPress 站点,使用了新域名(尽管在同一台 SiteGround 服务器上),并且没有 Cloudflare 运行 DNS,但收到了相同的错误消息。

还有其他建议吗?

或许可以联系 SiteGround,看看他们是否因某种原因阻止了您的服务器 IP 地址?

已解决。这是一个令人头疼的情况,问题莫名其妙地“自行解决”了,但具体原因尚不清楚。我推测这可能是 DNS 传播问题,而 Siteground 的 DNS 解析器在某些情况下响应较慢。

如果其他人也遇到这个问题,我唯一的建议是等待 48 小时后再试。:-/

另一位遇到类似问题的用户联系了 Siteground,他们成功解决了该问题。以下是 Siteground 修复方法的详细信息:[PAID] Fix cURL error 6 in Discourse WP Plugin - #4 by lucas.bagatini