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 は、Cloudflare を使用した SSL フレキシブル設定で、
フォーラム forum.fususu.com にはページルールとしてフル SSL(Cloudflare)を設定しています。

これで動作させることができましたか?

まだです…一時的に諦めました ^^!

これ、動作させることができたことがありますか?私は同じ環境(Digital Ocean 上の Discourse、Siteground 上の WordPress、両方とも Cloudflare の背後)で同じエラーに直面しています。ローカルマシンからは Curl が問題なく動作します。

何かアドバイスはありますか?

Cloudflare 側での SSL 設定はどうなっていますか?Discourse で Cloudflare のパフォーマンス最適化を使用していますか?

Cloudflare の SSL は、フレキシブルではなくフルモードで実行する必要があります。
Discourse で Cloudflare のパフォーマンス最適化が有効になっている場合は、ページルールを作成して無効にしてください。

それでも解決しない場合は、Discourse のドメインを共有してください。

URL は https://discuss.guidery.com です。

「discuss」サブドメインのページルールにより、パフォーマンスとセキュリティは無効化されています。
SSL は「Full (Strict)」に設定されています。

表示されているエラーメッセージは「cURL error 6: Could not resolve host: discuss.guidery.com」です。これは WP Query Monitor プラグインによって報告されています。

ローカルマシンから同じ cURL コマンドを実行すると、問題なく動作します。

WordPress側で接続をブロックするファイアウォールルールがありますか?

共有サーバー(SiteGround でホストされています)に SSH で接続し、Discourse インストールをリクエストする curl コマンドを手動で実行すると、同じエラーメッセージが表示されます。

“curl: (6)” Could not resolve host: discuss.guidery.com".

さらに、Cloudflare の DNS を使用せずに、同じ SiteGround サーバー上の新しいドメインで新しい WordPress サイトを作成しても、同じエラーメッセージが表示されました。

他に考えられることはありますか?

もしかして、SiteGround が何らかの理由でサーバーの IP アドレスをブロックしている可能性がありますか?

解決しました。これは、明確な解決策が判明しないまま、単に「動作し始めた」という厄介なケースの1つでした。DNSの伝播の問題であり、何らかの理由でSitegroundのDNSリゾルバが遅かったと推測します。

もし他の誰かがこの問題に遭遇した場合、私の唯一の提案は、48時間待ってから再度試してみることです。:-/

同様の問題を抱えた別のユーザーがSitegroundに連絡しました。彼らは問題を解決することができました。Sitegroundがどのように修正したかについての詳細は、以下の投稿にあります:[PAID] Fix cURL error 6 in Discourse WP Plugin - #4 by lucas.bagatini