Cloudflare를 사용한 Discourse 설정
이 가이드는 Cloudflare를 사용하여 Discourse를 구성하는 방법, 보안 모범 사례 및 문제 해결 팁을 설명합니다.
필요한 사용자 권한: 관리자
자체 호스팅 설치 환경에서는 콘솔 접근 권한이 필요합니다
요약
Cloudflare는 CDN을 통한 성능 향상, DDoS 보호와 같은 추가 보안 계층, 그리고 HTTPS 지원으로 Discourse 인스턴스를 강화할 수 있습니다. 이 가이드는 최적의 구성을 위한 설정 과정과 모범 사례를 다룹니다.
왜 Discourse에 Cloudflare를 사용해야 하는가
Discourse 인스턴스에 Cloudflare를 사용하면 다음과 같은 주요 이점이 있습니다:
- 성능: Cloudflare의 CDN은 일반 자산에 대한 전 세계 접근성을 향상시켜 전역적으로 사용자 경험을 개선합니다 (출처)
- 보안: 다음과 같은 추가 보호 계층을 제공합니다:
- DDoS 보호 (출처)
- HTTPS 지원 (출처) (Discourse의 Let’s Encrypt 설정의 대안)
자체 호스팅 설치 환경의 경우, Cloudflare가 이러한 이점을 제공하지만 설정에 복잡성을 더합니다.
Cloudflare 설정
- Cloudflare 기본 개념을 숙지합니다
- 설치 지침을 따라 도메인에 Cloudflare를 구성하고 보안, 성능, 신뢰성 이점을 얻습니다
구성 모범 사례
DNS 설정
- Discourse 인스턴스로 가리키는 DNS 기록이 프록시되도록 확인합니다
dash.cloudflare.com/?to=/:account/:zone/dns에서 DNS 설정에 액세스합니다
SSL/TLS 구성
- 암호화 모드를 "Full (strict)"로 설정합니다
dash.cloudflare.com/?to=/:account/:zone/ssl-tls에서 SSL/TLS 설정에 액세스합니다
SSL/TLS 구성이 올바르지 않으면 리다이렉트 루프가 발생할 수 있습니다
캐싱 구성
- 캐싱 수준을 "Standard"로 설정합니다
dash.cloudflare.com/?to=/:account/:zone/caching/configuration에서 캐싱 설정에 액세스합니다
캐시 규칙
Cloudflare는 최신 Rules 시스템을 권장하기 위해 Page Rules를 중단했습니다. dash.cloudflare.com/?to=/:account/:zone/rules에서 Cache Rules을 사용하여 다음을 생성합니다:
community.example.com/session/*에 대해 캐시 수준을 "Bypass"로 설정합니다- 수신 URL을 정규화하도록 URL 정규화 설정을 구성합니다
네트워크 설정
dash.cloudflare.com/?to=/:account/:zone/network의 네트워크 설정은 일반적으로 Discourse 기능에 영향을 미치지 않습니다. Discourse는 WebSockets, gRPC 또는 CF-IPCountry / True-Client-IP 헤더를 사용하지 않습니다. 동일한 도메인의 다른 소프트웨어가 특정 구성을 요구하지 않는 한 이러한 설정은 기본값으로 유지할 수 있습니다.
WAF(웹 애플리케이션 방화벽) 설정
Cloudflare 플랜에서 Managed Rules를 지원하는 경우, 다음을 생성합니다:
- 게시글 생성/수정 시 WAF 건너뛰기:
(starts_with(http.request.uri.path, "/posts") and http.request.method in {"POST" "PUT"})
- Data Explorer 플러그인 사용자의 경우, 관리자 쿼리 시 WAF 건너뛰기:
((http.request.uri.path contains "/admin/plugins/explorer/queries/" or http.request.uri.path contains "/admin/plugins/discourse-data-explorer/queries/") and http.request.method eq "PUT")
두 규칙 모두에 대해:
- "Skip all remaining rules"를 선택합니다
- "Log matching requests"를 활성화합니다
Business 플랜 이상을 사용 중인 경우, 더 정확한 매칭을 위해
matches정규식 연산자를 사용할 수 있습니다. 위에서 사용된starts_with와contains연산자는 Free와 Pro를 포함한 모든 플랜에서 작동합니다.
dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules에서 WAF 설정에 액세스합니다
콘텐츠 최적화
dash.cloudflare.com/?to=/:account/:zone/speed/optimization에서 다음을 구성합니다:
- Brotli 활성화
- Rocket Loader™ 비활성화
Rocket Loader™이 활성화되어 있어 사이트 다운 보고가 자주 접수되고 있습니다
자체 호스팅 설치 환경용 추가 구성
IP 주소 전달이 올바르게 이루어지도록 containers/app.yml의 templates 섹션에 다음을 추가합니다:
- "templates/cloudflare.template.yml"
템플릿을 추가한 후, 변경 사항이 적용되도록
./launcher rebuild app으로 컨테이너를 재빌드해야 합니다.
관련 항목: Cloudflare를 어떻게 설정하나요?
지원 리소스
문제 해결
콘텐츠 보안 정책(CSP) 문제
CSP 오류가 발생하는 경우:
- Rocket Loader가 비활성화되어 있는지 확인합니다
- 스크립트가
content security policy script src사이트 설정에 올바르게 추가되었는지 확인합니다
OneBox 기능
OneBox가 차단되는 경우:
- Super Bot Fight Mode가 활성화되어 있는지 확인합니다
- “Definitely automated” 설정이 “Managed” 또는 "Block"으로 설정되어 있다면 조정합니다
- OneBox 사용자 에이전트를 위한 사용자 지정 WAF 규칙 생성을 고려해 봅니다



