# DC SSO 연결 실패로 인한 타임아웃으로 관리자 지연 발생

**URL:** https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812
**Category:** WordPress
**Created:** [10월 31, 2024, 11:08오전 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812 "2024-10-31T11:08:56Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Firsh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firsh/32/454861_2.png) [@Firsh](https://meta.discourse.org/u/Firsh)
#### Post date: [10월 31, 2024, 11:08오전 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/1 "2024-10-31T11:08:56Z")

</div>

공식 플러그인을 사용하여 [Discourse Connect](https://meta.discourse.org/t/13045?silent=true) SSO를 설정했기 때문에, WP 사용자는 Discourse에서 별도 계정을 등록하지 않고도 로그인할 수 있습니다. 모든 기능이 정상적으로 작동하지만, Query Monitor 플러그인을 통해 발견한 타임아웃 문제로 인해 WP 대시보드(관리 영역)의 모든 요청이 10초씩 지연되고 있습니다.

https://{our-forum-address}/site.json cURL error 28: Connection timeout after 10001 ms

```
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

Plugin: wp-discourse

```

설령 이 기능이 작동한다고 해도, 왜 이런 호출이 필요한 것일까요? 이를 비활성화하는 방법은 무엇일까요?

포럼과 사이트는 별도의 서버에 있습니다. Cloudflare는 사용하지 않고 있으며, SSL은 Let’s Encrypt를 사용하고 있습니다. 스테이징 환경에서는 이런 문제가 없었습니다. 라이브 환경으로 이동하고 새로운 API 키와 시크릿을 생성하여 문제를 해결하려 했지만 실패했습니다.

플러그인은 \*\*Discourse에 연결되어 있지 않습니다. 연결 설정이 올바른지 확인하십시오. 문제가 지속되면 연결 로그를 활성화하고 로그를 확인하십시오.\*\*라고 표시하지만, 사용자는 주소를 포함하는 링크를 클릭하기만 하면 포럼에 무리 없이 로그인할 수 있으므로 실제로는 연결되어 있습니다.

WP 로그에는 다음과 같이 표시됩니다:

```plaintext

[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":"","http_body":""}

```

이상한 WP 보안 기능 때문에 문제가 생기는 것 같아서 아래 코드를 추가해 보았지만 역시 효과가 없었습니다:

```plaintext

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; // Allow the request by indicating the host IS external
	}

	return $is_external;
}

```

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [10월 31, 2024, 12:13오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/2 "2024-10-31T12:13:48Z")

</div>

@Firsh, 안녕하세요.

> [@Firsh](#):
>
> 설령 작동했다 해도, 왜 이런 호출이 필요한가요? 어떻게 비활성화할 수 있나요?

`/site.json`에 대한 이 호출은 WordPress 플러그인이 Discourse에 대한 정보를 가져오기 위해 필요합니다.

> [@Firsh](#):
>
> 플러그인이 **Discourse에 연결되어 있지 않습니다. 연결 설정이 올바른지 확인하십시오. 문제가 계속되면 연결 로그를 활성화하고 Logs를 확인하십시오** 라고 표시합니다.

이는 올바르게 연결되어 있지 않다는 것을 의미합니다. 현재는 잘 작동하는 것처럼 보일지라도, 계속 작동한다고 기대하기는 어렵습니다.

> [@Firsh](#):
>
> 새로운 API 키와 시크릿을 생성했습니다.

여기에 집중해야 합니다. 어떤 유형의 키를 생성했는지 공유해 주시겠습니까? 참고로, 다음 가이드라인을 따르고 있는지 확인해 주세요:

> [@WP Discourse를 Discourse에 연결하기](https://meta.discourse.org/t/connect-wp-discourse-to-discourse/223490):
>
> After you’ve [installed the WP Discourse Plugin](https://meta.discourse.org/t/install-the-wp-discourse-plugin/223489) you need to connect it to your Discourse. When you’re ready to go, watch this short video, or follow the instructions below. Next Step Once the plugin is connected, head over to the topic describing the feature you want to set up: [Publish posts to Discourse](https://meta.discourse.org/t/wp-discourse-and-publishing-posts-to-discourse/223492)[Use Discourse for Wordpress Comments](https://meta.discourse.org/t/wp-discourse-and-commenting/223493)[Log in to Discourse with Wordpress (DiscourseConnect)](https://meta.discourse.org/t/wp-discourse-and-discourseconnect/223494)Instructions Steps When you’re looking at the Connection tab of the [WP Discourse](https://github.com/discourse/wp-discourse) plugin settings,…

---

<div class="post-metadata">

### Author: ![Firsh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firsh/32/454861_2.png) [@Firsh](https://meta.discourse.org/u/Firsh)
#### Post date: [10월 31, 2024, 12:36오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/3 "2024-10-31T12:36:06Z")

</div>

> [@angus](#):
>
> 우리가 집중해야 할 부분이 바로 이것입니다. 어떤 유형의 키를 생성했는지 공유해 주실 수 있을까요?

키 때문이라고 생각하지 않습니다. 이전에 스테이징 사이트의 키로 시도해 보았으며, 새로 생성한 키는 "사용 안 됨"으로 표시됩니다. 포럼 홈 페이지에 대한 테스트 호출인 `wp_remote_request`를 시도해도 타임아웃이 발생합니다. "모든 사용자"와 "글로벌"로 설정해 두었습니다.

> [@angus](#):
>
> Wordpress 플러그인이 Discourse에 대한 정보를 가져오려면 `/site.json`에 대한 호출이 필요합니다.

네, 그런데 왜 관련 없는 관리자 페이지마다 매번 그렇게 되는 건가요? 필요할 때 한 번만 수행되면 충분합니다. 어디서 오는지 추적해 보니 `function get_discourse_categories()`에서 오는 것이며, 이는 `add_action( 'admin_init', array( $this, 'setup_options' ) );`에 하드코딩되어 있습니다. 제 WP가 포럼의 카테고리에 대해 알아야 할 필요는 없으며, 게시/댓글 기능을 사용하지 않으므로 로그인 기능만 필요하고, 그것은 이미 작동하고 있습니다.

또한 `wp_remote_request()`를 사용하여 포럼 홈 페이지에 대한 요청을 보냈는데, 이것도 타임아웃이 발생합니다. 다른 랜덤 사이트들은 접근 가능합니다.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [10월 31, 2024, 12:46오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/4 "2024-10-31T12:46:56Z")

</div>

요청 `/site.json`이 불필요하다고 느끼신다는 점은 이해합니다. 하지만 Discourse에 성공적으로 연결되지 않으면 WordPress 플러그인이 안정적으로 작동하지 않으므로, 어쨌든 그 원인을 파악해야 합니다.

1. 스테이징 환경과 프로덕션 환경 사이에 다른 차이가 있는지 생각나는 부분이 있나요?
2. 스테이징과 프로덕션 인스턴스의 [WP Discourse](https://github.com/discourse/wp-discourse) 로그 메타 파일을 공유해 주실 수 있나요?
3. WordPress와 Discourse 인스턴스에 대한 링크를 공유해 주실 수 있나요?

---

<div class="post-metadata">

### Author: ![Firsh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firsh/32/454861_2.png) [@Firsh](https://meta.discourse.org/u/Firsh)
#### Post date: [10월 31, 2024, 1:17오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/5 "2024-10-31T13:17:03Z")

</div>

네, 하지만 헝가리어로 된 비공개 회원 전용 사이트이자 포럼입니다.

포럼: [https://forum.intelligensbefektetok.hu/](https://forum.intelligensbefektetok.hu/)  
사이트: [https://intelligensbefektetok.hu/](https://intelligensbefektetok.hu/)

스테이징 환경은 VM에서 Docker로 실행되며 수동으로 만든 완전한 사본이었습니다. 프로덕션 환경은 제가 관리하지 않고 어떤 호스팅을 사용하는지 알 수 없지만, 이전에는 문제가 없었고 꽤 빨랐습니다.

방금 다음을 시도해 보았습니다:

- `discourse_request` 함수에서 `sslverify = false` 옵션
- 그리고 Cloudflare에서 제 다른 도메인에 CNAME(별칭)을 만들어 포럼의 호스트를 배경에서 가리키도록 설정했습니다(더 “좋은” SSL과 다른 호스트를 사용하여 라이브 사이트 호스트의 방화벽에서 루프백 제한이 있는지를 배제하기 위함): [https://ibkforum.stateofbliss.us](https://ibkforum.stateofbliss.us) 하지만 테스트 요청을 스테이징에서 수행하는 것은 정상적으로 작동하는 반면, 같은 방식으로 타임아웃이 발생합니다. 로그인하지 않으면 메인 사이트로 리다이렉트됩니다.
- 이 작은 플러그인을 사용하여 요청을 확인하고 있습니다: [https://wphive.com/plugins/wp-remote-request-check/](https://wphive.com/plugins/wp-remote-request-check/)

> 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) { } }

- 다른 WP 사이트, 이 포럼, 그리고 라이브 사이트가 자신에게 요청을 보내는 경우 모두 정상적으로 작동합니다.

스테이징 WP 로그:

```plaintext
[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](https://forum.intelligensbefektetok.hu/site.json)

도와주셔서 감사합니다.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [10월 31, 2024, 1:38오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/6 "2024-10-31T13:38:05Z")

</div>

> [@Firsh](#):
>
> 프로덕션은 제가 관리하지 않고, 어떤 종류의 호스팅인지도 전혀 모르겠습니다.

WordPress 프로덕션을 말씀하시는 건가요, 아니면 Discourse 프로덕션을 말씀하시는 건가요? Discourse 프로덕션 환경에서 리다이렉트를 수행하거나 요청 헤더를 변경(또는 제거)하는 것이 존재할 가능성이 있나요?

> [@angus](#):
>
> - 스테이징 및 프로덕션 인스턴스의 [WP Discourse](https://github.com/discourse/wp-discourse) 로그 메타 파일을 공유해 주실 수 있을까요?

두 인스턴스의 메타 파일을 공유해 주시면 도움이 될 것입니다. 관리자 패널의 “로그” 섹션에서 "메타 보기"를 클릭하세요.

> [@Firsh](#):
>
> `wp_remote_request()`를 사용하여 포럼 홈 페이지에 요청을 보냈는데, 이것도 타임아웃이 발생합니다.

이것이 근본적인 문제일 가능성이 높습니다. WordPress가 Discourse를 전혀 참조할 수 없다면 연결이 작동하지 않을 것입니다. 이 연결성을 쉽게 테스트할 수 있다면, 포럼의 네트워크 레이어를 조정하면서 403(즉, 권한 없음) 응답을 받을 때까지 계속 테스트해 보시는 것이 좋습니다.

직감적으로 이것은 네트워크 레이어 문제라고 생각합니다. 리다이렉트나 방화벽 때문일 수 있습니다.

---

<div class="post-metadata">

### Author: ![Firsh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firsh/32/454861_2.png) [@Firsh](https://meta.discourse.org/u/Firsh)
#### Post date: [10월 31, 2024, 1:59오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/7 "2024-10-31T13:59:34Z")

</div>

스테이징 Discourse는 없으며, 두 사이트 모두 동일한 라이브 Discourse(동일한 사용자 ID 등)를 사용합니다. 다른 스레드에서 이 문제에 대해 문의했고, 문제없다는 답변을 받았습니다. 포럼의 네트워크 레이어는 매우 단순하며, Hetzner에 호스팅된 VPS에서 공식 Docker를 사용하고 있습니다. 포럼은 일부 시각적 요소 외에는 거의 사용되거나 커스터마이징되지 않았습니다. 접속을 차단할 수 있는 설정은 인지하고 있지 않습니다. 그들의 비정상적인 설정에 대해 더 우려하고 있으므로, 연결이 실패하는 이유를 확인해 달라는 티켓을 WP 호스팅会社に 생성했습니다.

흥미로운 점은 포럼이 WP에 도달할 수 있다는 사실(반대는 아님)만으로도 SSO가 작동하는 데 "충분"하다는 것입니다. 다만 포럼에서 사용자를 로그아웃하는 경우는 제외됩니다.

[로그](https://drive.google.com/drive/folders/1RioYUUxIfYC7a3DXzc9op0JIBEIPP8iY?usp=sharing) (라이브 사이트에서 0바이트 ZIP을 다운로드함).

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [10월 31, 2024, 2:33오후 UTC](https://meta.discourse.org/t/failing-dc-sso-connection-slowing-down-the-admin-with-a-timeout/333812/8 "2024-10-31T14:33:42Z")

</div>

> [@Firsh](#):
>
> 연결이 실패하는 이유를 확인해 달라고 WP 호스팅 회사에 티켓을 만들었습니다. 그들의 비정상적인 설정이 더 걱정되거든요.

네, 일단 이 결과부터 기다리는 게 좋겠습니다. 그렇지 않으면 여기서 시간을 낭비할 수 있어요. 근본적인 질문은 표준 WP 요청이 왜 포럼에 도달하지 못하는지입니다.
