# Cloudflare와 함께 Discourse 사용: 모범 사례

**URL:** https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405
**Category:** Self-Hosting
**Tags:** how-to, cloudflare
**Created:** [1월 30, 2024, 2:56오전 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405 "2024-01-30T02:56:10Z")
**Posts on this page:** 9
**Page:** 2

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [3월 10, 2026, 7:28오후 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/26 "2026-03-10T19:28:53Z")

</div>

도움이 되었으면 좋겠습니다. 또한 최적의 설정에 대한 일반적인 가이드도 여기에 작성해 두었습니다:

> **[Recommended Cloudflare Performance & Security Settings (Guide) | LinuxBlog.io](https://linuxblog.io/recommended-cloudflare-performance-security-settings-guide/)**
>
> Cloudflare is a great tool for website performance and security. They have a whole suite of tools to help with performance and security and are a staple

Cloudflare 직원 한 명도 댓글 섹션에서 몇 가지 조언과 수정 사항을 추가해 주셨습니다.

해당 가이드를 업데이트하던 중 Discourse에서 새로운 조언이 있는지 확인하다가 이 페이지를 발견했습니다.

> [@Discourse](#):
>
> ```plaintext
> (http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})
> 
> ```
> 
> 1. [Data Explorer](https://meta.discourse.org/t/32566?silent=true) 플러그인 사용자의 경우, 관리자 쿼리에 대해 WAF를 건너뛰세요:
> 
> ```plaintext
> (http.request.uri.path contains "/admin/plugins/explorer/queries/" and http.request.meth
> 
> ```

이 규칙들을 제 관리형 규칙(managed rules)에 추가할 예정입니다. 감사합니다!

제 커스텀 규칙에 대한 개요입니다. 이 규칙들은 스팸을 줄이는 데 정말 도움이 되었으며, 종종 가장 품질이 낮은 트래픽 중 일부가 VPN 및 DC(데이터센터) 트래픽을 통해 유입되는데, 이 규칙들이 이를 방지하는 데 도움이 되었습니다:

 ![image](https://global.discourse-cdn.com/meta/original/4X/9/f/7/9f79f5a6186f31085d1e935fb72bdf0c213ae8c7.png)

약 6개월간 이 규칙들을 실행해 왔으며, Log Explorer 도구를 사용하여 10,000건씩 이벤트를 검사함으로써 그 효과를 검증해 왔습니다. 이제 규칙의 전체 내용을 담은 정식 문서(Write-up)를 작성할 예정입니다.

---

<div class="post-metadata">

### Author: ![sandra.mccollum](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sandra.mccollum/32/441742_2.png) [@sandra.mccollum](https://meta.discourse.org/u/sandra.mccollum)
#### Post date: [3월 11, 2026, 5:40오후 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/27 "2026-03-11T17:40:46Z")

</div>

새로운 Discourse 사이트에 적용하기 전에 **무료** 버전으로 Cloudflare 연동을 이해하려고 합니다. 구체적인 내용이나 예시를 통해 설명해 주실 수 있을까요? Discourse 사이트가 `discourse.abc123.com`이라고 가정하겠습니다.

(1) Cloudflare가 현재 제가 설정해 둔 원본 nginx 보안 헤더를 제거하는 것 같습니다?

(2) 다음 코멘트를 이해하지 못하겠습니다: “CloudFlare CDN(주황색 구름)을 활성화하기로 결정했다면, Discourse 인스턴스 주소를 위한 페이지 규칙을 설정하는 한 가지 더 단계를 거쳐야 합니다. 이 규칙은 ‘성능 비활성화(Disable Performance)’를 설정해야 하며(이 옵션을 찾을 수 없음), 이는 Discourse와 간섭하는 것으로 잘 알려진 CloudFlare 기능을 끄게 됩니다.” 그리고 `dash.cloudflare.com/?to=/:account/:zone/rules`에서 다음 페이지 규칙을 생성하십시오:

- `community.example.com/session/*`에 대해 캐시 레벨을 “Bypass”로 설정

- 수신 URL을 정규화하도록 규칙 설정 구성

또한 제가 처리해야 할 다른 함정이나 주의 사항이 있다면 알려주세요.

미리 감사합니다.

---

<div class="post-metadata">

### Author: ![Lee\_Ars](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lee_ars/32/1597_2.png) [@Lee\_Ars](https://meta.discourse.org/u/Lee_Ars)
#### Post date: [3월 16, 2026, 12:48오후 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/28 "2026-03-16T12:48:08Z")

</div>

2025년 여름부터 Cloudflare를 프록시 모드로 Discourse 포럼 앞에 배치하여 사용해 왔는데, 아무 문제 없이 잘 작동하고 있습니다. 요즘에는 Discourse를 제대로 작동시키기 위해 특별히 해야 할 Discourse 고유 설정이 많지 않기 때문입니다.

가장 중요한 항목 중 하나는 `app.yml` 파일에 Cloudflare 템플릿을 포함시키는 것입니다. 이를 하지 않으면 Discourse 대시보드에서 실제 방문자 IP 주소 대신 Cloudflare 서버 IP 주소만 표시됩니다.

“/session/\*에 대한 캐시 우회” 규칙은 여전히 필요한 것으로 보입니다(새로운 인터페이스에서 캐시 규칙으로 설정하십시오). 또한 “게시물 생성/편집 시 WAF 건너뛰기” 규칙은 확실히 여전히 필요합니다(저는 이를 관리 규칙으로 설정해 두었습니다).

저는 주로 Discourse를 WordPress 사이트의 댓글 시스템으로 사용하므로, 방문자가 특정 WP 게시물의 댓글 스레드를 요청할 때 웹 서버가 출력하는 `/wp-json/wp-discourse/v1/discourse-comments?post_id=xxxx` AJAX 응답에 WordPress에서 60초의 TTL을 추가하고 있습니다. 이는 급증하는 방문자 패턴을 관리하는 데 도움이 됩니다. `/wp-json/wp-discourse/`가 포함된 URI에 대해 TTL을 존중하는 CF 캐시 규칙을 추가했습니다(Cloudflare에서는 Enterprise 계정이 없으면 해당 URL에 충분히 짧은 TTL을 설정할 수 없으므로, mu-플러그인을 통해 애플리케이션 계층에서 TTL을 설정한 후 CF 캐시 규칙을 통해 CF가 해당 TTL을 존중하도록 설정했습니다.)

이 밖에도 스레드의 첫 번째 게시물에서 언급된 기본 설정을 제외하면 할 일이 별로 없습니다. Cloudflare는 Discourse와 상당히 잘 작동합니다.

---

<div class="post-metadata">

### Author: ![jdc20181](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jdc20181/32/515028_2.png) [@jdc20181](https://meta.discourse.org/u/jdc20181)
#### Post date: [3월 17, 2026, 3:27오전 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/29 "2026-03-17T03:27:37Z")

</div>

안녕하세요, 방금 이걸 설정했는데 20분 만에 끝냈습니다.

저도 Cloudflare 무료 플랜을 사용하는데, 일부 설정이 실제로 변경되었습니다. Cloudflare 대시보드의 검색창을 사용하면 해당 설정의 새 위치가 팝업으로 표시되니 참고하세요. 저도 일부 설정을 찾는 데 어려움을 겪었습니다.

**재빌드(rebuild)가 필요합니다.**

---

<div class="post-metadata">

### Author: ![sniper756](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sniper756/32/545002_2.png) [@sniper756](https://meta.discourse.org/u/sniper756)
#### Post date: [3월 17, 2026, 10:54오전 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/30 "2026-03-17T10:54:18Z")

</div>

저는 그냥 노란 구름만 켜 두었고, 다른 조작은 아무것도 하지 않았습니다. 시간이 나면 저도 설정을 해 보고 효과를 확인해 보겠습니다.

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [3월 19, 2026, 3:55오후 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/31 "2026-03-19T15:55:34Z")

</div>

> [@haydenjames](#):
>
> 규칙 전체 내용을 담은 제대로 된 글을 작성할 예정입니다

앞서 언급했던 Discourse + Cloudflare WAF 관련 글을 완성했습니다:

> **[Cloudflare with Discourse: Setup Guide (WAF & Security Rules) | LinuxBlog.io](https://linuxblog.io/cloudflare-discourse-setup-guide/)**
>
> Cloudflare WAF custom rules, rate limiting, and bot management for self-hosted Discourse forums. Production-tested with tuning advice.

제 Discourse 포럼에서 사용하는 전체 커스텀 규칙 스택을 다루고 있습니다: 정적 자산과 `/message-bus`에 대한 스킵 규칙, 스캐너 차단 규칙, ASN 및 지오패스(geo challenge), Discourse에 맞게 조정된 레이트 리미팅, 그리고 관리 규칙 예외 사항입니다.

또한 [공식 가이드의 게시물 작성/수식 표현](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405)에서 명확히 해야 할 부분이 하나 발견되었습니다: [연산자 `matches`](https://community.cloudflare.com/t/using-discourse-with-cloudflare-best-practices/602890)는 **Business** 플랜이 필요합니다. 따라서 이 글에서는 **Pro** 플랜에서도 작동하는 `starts_with` 대안을 사용했습니다.

실제 트래픽이 있는 라이브 포럼에서 테스트했습니다. 제안, 개선 사항 또는 설정 관련 문제가 발생하면 알려주시면 좋겠습니다.

---

<div class="post-metadata">

### Author: ![sniper756](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sniper756/32/545002_2.png) [@sniper756](https://meta.discourse.org/u/sniper756)
#### Post date: [3월 19, 2026, 11:58오후 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/32 "2026-03-19T23:58:11Z")

</div>

이 설정 방식이 노란 구름만 켜고 나머지는 모두 기본 설정으로 둔 것과 어떤 차이가 있는지 알고 싶습니다. 감사합니다.

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [3월 20, 2026, 1:37오전 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/33 "2026-03-20T01:37:21Z")

</div>

좋은 질문입니다. 오렌지 클라우드(Orange Cloud) 기본 설정만으로도 DNS, CDN, DDoS 보호, 그리고 무료 관리 규칙 세트가 제공됩니다. 이는 견고한 기본 구성이며, Discourse는 이 설정만으로 충분히 잘 작동합니다.

많은 분들이 더 깊이 설정을 진행하는 이유는 주로 스팸 때문이지만, 낭비되는 대역폭/서버 리소스와 전반적인 페이지 속도/로드 성능도 중요한 요인입니다.

스팸의 경우, 저희는 주당 5~10건의 스팸 게시글을 받았으며, 때로는 그 정도가 너무 심해서 이 포럼에서 해결책을 적극적으로 찾아보기도 했습니다.

이러한 사용자 정의 규칙을 배포한 이후로는 월 2~3건 수준으로 줄었습니다. 남은 주요 문제는 잡기만 하면 새 계정으로 계속 가입하는 1~2명의 트롤과 문제制造者(문제制造者)들입니다. 하지만 그것은 또 다른 이야기입니다! 데이터센터 및 VPN 트래픽에 대한 챌린지(인증 요청), Tor 및 문제 국가에 대한 챌린지 적용이 큰 차이를 만들었습니다.

스팸 외에도 호스팅 리소스 측면이 있습니다. 자신의 호스팅 리소스가 정확히 무엇에 사용되는지 아는 것은 큰 도움이 됩니다. 또한 자동화 트래픽/봇에 먹이를 주지 않는 것은 인터넷 전반에도 좋은 일입니다.

우선 좋은 네트워크에서 견고하고 빠른 호스팅을 시작하는 것이 가장 중요합니다. 그 위에 Cloudflare를 적용하면 서버에서 멀리 있는 사용자들도 빠른 경험을 할 수 있도록 보장합니다. 캐싱 레이어는 기본 설정만으로도 도움이 되지만, 기본 설정을 넘어가면 성능과 보안 모두 지속적으로 개선됩니다.

기본적으로 Cloudflare는 부수 효과 없이 매우 안전하게 활성화할 수 있는 설정들을 제공합니다. 그러나 기본적으로 켜져 있지 않을 뿐, 안전하게 활성화할 수 있는 추가 설정들도 많이 있습니다. 그리고 사용자 정의 규칙은 사용자 정의여야만 합니다. Cloudflare에는 "나는 Discourse를 실행 중이다"나 "나는 WordPress를 실행 중이다"라고 선택하면 규칙을 만들어 주는 마법사 같은 기능이 없기 때문입니다. 그것은 훌륭한 기능이 될 것이며, 다음 통화에서 이 기능을 제안할 계획입니다.

따라서 원하는 것에 따라 달라집니다. 기본 설정이 잘 작동하고 스팸이 문제가 되지 않는다면, 이 모든 것이 필요하지 않을 수 있습니다.

하지만 제 생각에는 포럼에 도달하는 트래픽에 대한 더 많은 제어권을 갖고 싶고, 호스팅 레이어부터 엣지까지 모든 단계에서 성능을 최대한 끌어내길 원한다면, 사용자 정의 규칙을 만드는 노력은 가치가 있습니다.

---

<div class="post-metadata">

### Author: ![sandra.mccollum](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sandra.mccollum/32/441742_2.png) [@sandra.mccollum](https://meta.discourse.org/u/sandra.mccollum)
#### Post date: [4월 26, 2026, 7:31오후 UTC](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405/34 "2026-04-26T19:31:10Z")

</div>

권장 사항을 따랐다고 생각하는데 (무료 Cloudflare를 사용 중입니다) 현재까지 발견한 문제가 두 가지 있습니다:

(1) 첫 접속 시 메인 로그인 화면이 항상 비어 있습니다. URL을 클릭한 뒤 다시 Enter 키를 누르면 화면이 표시됩니다.

(2) 임베드된 PDF가 깨져서 보이지 않지만 다운로드 자체는 가능합니다. 캐시 규칙에서 PDF 파일 확장자를 우회하도록 설정해 보았지만 효과는 없었습니다.

Cloudflare를 일시 중지해도 도움이 되지 않습니다. DNS 용도로만 Cloudflare(회색)를 사용하는 경우를 제외하고는 이 두 가지 문제가 발생하지 않습니다.

이 두 문제를 가장 잘 디버깅하거나 수정하기 위해 제가 무엇을 해야 할지 혹시 아이디어가 있을까요?

미리 감사합니다.

[이전 페이지](https://meta.discourse.org/t/using-discourse-with-cloudflare-best-practices/293405.md?page=1)
