워드프레스 클라우드플레어 설치 — 보안과 속도를 한 번에 잡는 실전 세팅 : 워드프레스에 클라우드플레어를 붙이면 해외 봇 트래픽이 원본 서버에 닿기 전에 걸러지고, 글로벌 CDN으로 정적 파일이 빨라진다. 네임서버 변경부터 Bot Fight Mode, 국가별 챌린지, Rate Limiting, REST API 저장 오류 해결, 애드센스 여백 버그까지 실제 설정 순서대로 정리했다. 무료 플랜의 규칙 5개 한도 안에서 배분하는 방법과, 흔히 잘못 알려진 설정도 함께 짚는다.
클라우드플레어 설치결론 — 순서를 틀리면 사이트가 죽는다
클라우드플레어는 무료로도 강력합니다. 그런데 설정 순서를 틀리면 HTTPS 무한 리다이렉트에 걸리거나, 글 저장이 안 되거나, 보안 플러그인이 모든 방문자를 같은 IP로 인식하게 됩니다.
제대로 된 순서는 이렇습니다.
| 순서 | 작업 | 놓치면 생기는 일 |
|---|---|---|
| 1 | SSL/TLS 모드를 Full (strict) 로 먼저 변경 | 리다이렉트 루프, 525·526 오류 |
| 2 | 네임서버 변경 및 프록시(주황 구름) 확인 | 연동 자체가 안 됨 |
| 3 | 보안 규칙 배포 (Bot Fight Mode, 국가 챌린지, Rate Limiting) | 서버 부하 지속 |
| 4 | 실제 방문자 IP 복원 | 보안 플러그인 오작동, 차단 오판 |
| 5 | 캐시·속도 최적화 | 효과 절반 |
| 6 | 워드프레스 어드민 예외 처리 | 글 저장 실패 |
1번을 건너뛰는 경우가 가장 많고, 피해도 가장 큽니다.
1. 클라우드플레어를 쓰는 이유 세 가지
① 원본 서버 IP 은닉과 자원 보호
방문자 요청이 내 호스팅 서버에 닿기 전에 클라우드플레어의 에지 네트워크를 먼저 거칩니다. DDoS, 취약점 스캔, 무차별 크롤링이 이 단계에서 걸러집니다. 원본 IP가 노출되지 않는다는 것 자체가 보안입니다. 공격자가 서버 주소를 모르면 표적 공격을 시작할 지점을 찾기 어렵습니다.
② 무료 SSL과 HTTPS 상시 유지
Let’s Encrypt 인증서 갱신이 실패해서 사이트가 경고 페이지로 바뀌는 일이 워드프레스에서 흔합니다. 클라우드플레어를 붙이면 에지에서 인증서를 관리하므로 이 문제에서 벗어납니다.
③ 글로벌 CDN
이미지·CSS·JS 같은 정적 파일을 전 세계 캐시 서버에서 제공합니다. 국내 서버를 쓰면서 해외 방문자가 있는 사이트일수록 체감 차이가 큽니다.
광고 수익과의 관계는 조심해서 봐야 합니다. 무효 트래픽이나 비정상 봇 요청이 늘면 애드센스의 노출 범위(Coverage) 지표가 왜곡될 수 있습니다. 다만 “봇을 막으면 노출 범위가 특정 수치까지 떨어진다”는 식의 인과관계는 사이트마다 다르므로, 클라우드플레어를 트래픽 품질을 정리하는 수단으로 이해하는 편이 정확합니다.
2. 클라우드플레어 설치 전에 반드시 — SSL/TLS 모드
여기가 이 글에서 가장 중요한 부분입니다. 대부분의 가이드가 이 단계를 빼먹습니다.
클라우드플레어 대시보드에서 SSL/TLS → Overview 로 이동합니다.
| 모드 | 동작 | 판정 |
|---|---|---|
| Off | HTTPS 없음 | 사용 불가 |
| Flexible | 방문자↔CF는 HTTPS, CF↔서버는 HTTP | 위험. 리다이렉트 루프 원인 |
| Full | 양쪽 HTTPS, 서버 인증서 검증 안 함 | 최소 허용 |
| Full (strict) | 양쪽 HTTPS, 서버 인증서까지 검증 | 권장 |
Flexible은 반드시 피하세요. 워드프레스가 “이 요청은 HTTP다”라고 인식해서 HTTPS로 리다이렉트를 걸고, 클라우드플레어는 다시 HTTPS로 넘기고, 이게 무한 반복되면서 ERR_TOO_MANY_REDIRECTS가 납니다. 이미 Flexible로 운영 중이었다면 호스팅에 인증서가 있는지 확인한 뒤 Full (strict)로 올리면 대부분 해결됩니다.
같은 화면에서 두 가지를 함께 켭니다.
- Edge Certificates → Always Use HTTPS 켜기
- Automatic HTTPS Rewrites 켜기 (혼합 콘텐츠 완화)

3. 도메인 연결 — 네임서버 변경
① 사이트 추가
클라우드플레어 가입 후 Add a Site에 도메인을 입력하고 Free 플랜을 선택합니다.
② DNS 레코드 확인
기존 호스팅의 A 레코드와 CNAME이 자동으로 불러와집니다. 두 가지를 확인하세요.
- A 레코드가 실제 서버 IP를 가리키는가
- 프록시 상태(주황색 구름)가 켜져 있는가 — 회색 구름이면 CDN·보안이 전혀 적용되지 않습니다
메일 서버용 MX 레코드는 프록시 대상이 아닙니다. 건드리지 마세요.
③ 네임서버 교체
도메인 등록기관(가비아, 호스팅케이알, 후이즈, Cloudflare Registrar 등) 관리 페이지에서 네임서버 1·2차를 클라우드플레어가 지정한 주소로 바꿉니다.
Copy예: ana.ns.cloudflare.com
bob.ns.cloudflare.com
Code language: PHP (php)
④ 전파 확인
대시보드에서 도메인 상태가 Active로 바뀌면 완료입니다. 보통 수 분에서 수 시간, 최대 24시간까지 걸립니다.

4. 클라우드플레어 설치 보안 세팅 — 무료 플랜에서 할 수 있는 것
① Bot Fight Mode 켜기
경로: Security → Settings → Bot traffic 필터 → Bot fight mode 토글 ON
클라우드플레어의 머신러닝 엔진이 알려진 봇 패턴을 탐지해 CPU 연산이 필요한 챌린지를 던집니다. 봇 입장에서 요청당 비용이 올라가므로 자동화 트래픽이 줄어듭니다.
여기에 중요한 제약이 있습니다. Bot Fight Mode는 WAF 커스텀 규칙이나 Page Rules로 예외 처리(Skip)할 수 없습니다. 별도 파이프라인에서 동작하기 때문입니다. 이 점이 뒤에 나올 REST API 오류 해결법과 직결됩니다.

② 국가 기반 챌린지 — 신중하게
경로: Security → Security rules → Create rule → Custom rules
CopyRule name: 해외 저품질 트래픽 챌린지
Field: Country
Operator: is in
Value: (실제 스캔이 몰리는 국가만)
Action: Managed Challenge
Code language: PHP (php)
Block 대신 Managed Challenge를 쓰는 이유는 타당합니다. 사람은 체크박스 한 번으로 통과하고 자동화 크롤러만 걸러지므로, 오탐 피해가 훨씬 작습니다.

다만 국가를 넓게 잡으면 손해입니다. 싱가포르는 아시아 트래픽의 주요 경유지이고, 중국에도 실제 독자가 있을 수 있습니다. 국가만으로 자르기보다는 아래 조합을 권합니다.
| 조건 조합 | 의미 |
|---|---|
Country = CN AND Threat Score > 10 | 스캔성 요청만 정밀 타격 |
Country = CN AND URI Path contains /wp-login.php | 로그인 공격만 차단 |
Bot Score < 30 (Pro 이상) | 봇 점수 기반, 국가 무관 |
③ Rate Limiting — 무료 플랜의 실질 방어선
경로: Security → Security rules → Rate limiting rules
무료 플랜에서도 제한된 수의 Rate Limiting 규칙을 쓸 수 있습니다. 우선순위는 로그인과 XML-RPC입니다.
| 대상 | 경로 | 권장 |
|---|---|---|
| 로그인 무차별 대입 | /wp-login.php | 분당 5~10회 초과 시 Block |
| XML-RPC 공격 | /xmlrpc.php | 아예 차단 규칙 권장 |
| REST API 남용 | /wp-json/ | 분당 60회 수준 |
/xmlrpc.php는 워드프레스에서 거의 쓰지 않는다면 보안 규칙으로 통째로 막는 편이 낫습니다. 과거에는 핑백과 모바일 앱에서 썼지만 지금은 대부분 불필요합니다.
④ Free Managed Ruleset
무료 플랜에도 클라우드플레어가 관리하는 기본 룰셋이 제공됩니다. Security → Security rules → Managed rules 에서 활성화되어 있는지 확인하세요. 알려진 취약점 공격 패턴을 자동으로 막아줍니다.

5. 무료 플랜의 규칙은 5개뿐 — 배분이 중요하다
이게 실전에서 가장 많이 걸리는 벽입니다. 무료 플랜은 커스텀 규칙을 최대 5개까지 만들 수 있습니다.
그래서 규칙을 아껴 써야 합니다. 우선순위 배분 예시입니다.
| 순번 | 규칙 | 목적 |
|---|---|---|
| 1 | 관리자 IP 허용 (Skip) | 내 IP는 모든 검사 통과 |
| 2 | /wp-json/ 예외 (Skip) | 글 저장 오류 방지 |
| 3 | /xmlrpc.php 차단 (Block) | 공격 표면 제거 |
| 4 | 국가 + 위협점수 챌린지 | 해외 스캔 차단 |
| 5 | 여유분 | 문제 생겼을 때 긴급 예외용 |
5번을 비워두는 게 요령입니다. 클라우드플레어를 붙이고 나면 예상 못 한 곳에서 하나씩 문제가 생깁니다. 그때 쓸 카드를 남겨두세요. 규칙을 다 쓰면 급할 때 손을 못 씁니다.
6. 워드프레스 어드민 오류 — “서버에서 올바른 응답을 받을 수 없습니다”
클라우드플레어를 붙인 뒤 구텐베르크에서 글을 저장하면 이런 메시지가 뜰 수 있습니다.
업데이트에 실패했습니다. 서버에서 올바른 응답을 받을 수 없습니다. (Updating failed. The response is not a valid JSON response)
원인
워드프레스는 임시저장·발행 때 백그라운드에서 /wp-json/wp/v2/... 로 비동기 요청을 보냅니다. 클라우드플레어가 이 요청을 봇으로 오인해 챌린지 페이지(HTML)를 돌려주면, 워드프레스는 JSON을 기대했는데 HTML을 받았으므로 파싱에 실패합니다. 보안 기능이 정상 작동해서 생기는 부작용입니다.
잘못 알려진 해결법
인터넷 가이드에 이런 설명이 자주 보입니다.
Skip 규칙에서 “Bypass Bot Fight Mode” 체크박스를 켜세요
이 옵션은 일반 Bot Fight Mode에는 없습니다. Skip 액션에서 체크할 수 있는 것은 Super Bot Fight Mode(Pro 이상)이며, 무료 플랜의 Bot Fight Mode는 WAF 규칙으로 우회할 수 없습니다.
무료 플랜에서 실제로 되는 해결법
방법 1 — 관리자 IP를 IP Access Rule로 허용 (가장 확실)
경로: Security → WAF → Tools → IP Access rules (또는 Security → Security rules → IP Access rules)
CopyIP: 내 공인 IP
Action: Allow
Code language: PHP (php)
IP Access Rule이 먼저 매칭되면 Bot Fight Mode는 트리거되지 않습니다. 이것이 무료 플랜에서 Bot Fight Mode를 실질적으로 피하는 유일한 정석입니다.
집에서 쓰는 회선은 유동 IP라서 주기적으로 바뀝니다. 바뀔 때마다 갱신해야 하니, 한 달에 한 번 확인하는 습관을 들이거나 한국 통신사 IP 대역을 통째로 넣지 마세요(보안이 무너집니다).
방법 2 — /wp-json/ 경로 예외
경로: Security → Security rules → Create rule → Custom rules
CopyRule name: WordPress REST API 예외
Field: URI Path
Operator: contains
Value: /wp-json/
Action: Skip
체크: All remaining custom rules
All rate limiting rules
All managed rules
Code language: PHP (php)
이 규칙은 커스텀 규칙·Rate Limiting·관리형 룰셋을 건너뜁니다. Bot Fight Mode는 건너뛰지 못합니다. 그래서 방법 1과 함께 써야 완전합니다.
방법 3 — Bot Fight Mode를 끄는 선택
글 저장 오류가 계속되면 Bot Fight Mode를 잠시 끄고, 대신 Rate Limiting과 국가 챌린지로 방어하는 방법도 있습니다. Bot Fight Mode가 주는 이득보다 어드민 스트레스가 크다면 합리적인 선택입니다.
7. 실제 방문자 IP 복원 — 이걸 빼면 보안 플러그인이 망가진다
클라우드플레어를 붙이면 서버가 보는 모든 방문자 IP가 클라우드플레어의 IP로 바뀝니다. 그러면 워드프레스 보안 플러그인(Wordfence, iThemes Security 등)과 댓글 스팸 필터가 전부 오작동합니다. 모든 방문자가 같은 IP에서 오는 것처럼 보이기 때문입니다.
| 증상 | 원인 |
|---|---|
| 특정 국가 차단 플러그인이 전부 차단 | 모두 클라우드플레어 IP로 인식 |
| 로그인 시도 제한이 정상 작동 안 함 | 동일 IP로 카운트 |
| 댓글 스팸 필터 오탐 | IP 기반 판정 불가 |
| 서버 접속 로그 분석 불가 | 전부 CF IP |
해결은 두 가지 중 하나입니다.
- 호스팅 패널에서
mod_cloudflare또는mod_remoteip모듈 활성화 — 카페24, 클라우드웨이즈 등은 옵션으로 제공합니다. Cloudways는 Cloudflare Enterprise 연동 시 자동 처리됩니다. - 워드프레스 플러그인 사용 — “Cloudflare Real IP” 계열 플러그인이
CF-Connecting-IP헤더를 읽어 실제 IP로 복원합니다.
이 단계를 건너뛰면 클라우드플레어로 얻은 보안 이득의 상당 부분이 워드프레스 안에서 상쇄됩니다.
8. 속도 설정 — 지금은 없는 기능이 있다
Auto Minify는 2024년 8월에 종료됐다
과거 클라우드플레어 강좌의 단골이었던 Auto Minify(HTML·CSS·JS 압축)는 2024년 8월 5일부로 서비스가 종료되었습니다. 대시보드에서 찾을 수 없는 게 정상입니다.
대안은 워드프레스 안에서 처리하는 것입니다.
| 플러그인 | 특징 |
|---|---|
| LiteSpeed Cache | LiteSpeed 서버일 때 가장 강력. 무료 |
| WP Rocket | 유료지만 설정이 단순하고 안정적 |
| Autoptimize | 무료, CSS·JS 최적화 세밀 조정 가능 |
Browser Cache TTL
경로: Caching → Configuration → Browser Cache TTL
Respect Existing Headers 또는 4시간 ~ 1일을 권장합니다. 너무 길게 잡으면 CSS를 수정해도 방문자 브라우저에 옛 파일이 남습니다.
캐시에서 제외해야 하는 경로
| 경로 | 이유 |
|---|---|
/wp-admin/ | 관리자 페이지 캐싱 금지 |
/wp-login.php | 로그인 세션 |
/wp-json/ | REST API |
| 장바구니·결제 페이지 | 우커머스 사용 시 필수 |
Rocket Loader는 신중하게
Rocket Loader는 JS 실행을 지연시켜 초기 로딩을 빠르게 하지만, 애드센스·결제·슬라이더 플러그인과 충돌이 잦습니다. 광고가 안 뜨거나 레이아웃이 깨지면 가장 먼저 이 기능을 의심하세요. 경로는 Speed → Optimization → Rocket Loader입니다.
APO — 유료지만 효과가 확실한 선택
Automatic Platform Optimization(APO) 은 HTML까지 엣지에서 캐싱해 워드프레스의 동적 페이지 응답 속도를 크게 개선합니다. 무료 플랜에서 월 5달러의 추가 비용이 들고, Pro 이상 플랜에서는 무료로 포함됩니다.
| 항목 | 무료 (APO 없음) | APO 사용 |
|---|---|---|
| 정적 파일 캐싱 | O | O |
| HTML 캐싱 | X (매번 원본 요청) | O |
| 원본 서버 부하 | 높음 | 크게 감소 |
| 비용 | 0 | 월 5달러 |
방문자가 많거나 원본 서버가 약하면 5달러가 아깝지 않습니다. 반대로 트래픽이 적으면 무료 캐싱만으로 충분합니다.
9. 애드센스 여백 버그
클라우드플레어와 직접 관련은 없지만, 설정 후 사이트를 점검하다 보면 자주 발견되는 문제입니다.
원인
헤더의 애드센스 코드가 고정 픽셀로 작성되어 있으면, 광고가 낙찰되지 않았을 때(Unfilled) 빈 상자가 그 크기만큼 화면을 차지합니다.
Copy<!-- 문제가 되는 형태 -->
<ins class="adsbygoogle" style="display:inline-block;width:970px;height:250px" ...>
Code language: PHP (php)
해결 1 — 반응형 코드로 교체
Copy<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXXXX"
data-ad-slot="XXXXXXXX"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
Code language: PHP (php)
해결 2 — 미송출 광고는 아예 숨기기
테마의 추가 CSS(외모 → 사용자 정의하기 → 추가 CSS)에 넣습니다.
Copyins.adsbygoogle[data-ad-status="unfilled"] {
display: none !important;
}
Code language: PHP (php)
이 한 줄로 빈 광고 박스가 레이아웃에서 완전히 사라집니다.
10. 설치 후 24~48시간 체크리스트
| 확인 항목 | 확인 방법 | 정상 기준 |
|---|---|---|
| 도메인 상태 | 대시보드 메인 | Active |
| HTTPS | 브라우저 주소창 | 자물쇠, 리다이렉트 루프 없음 |
| SSL 모드 | SSL/TLS → Overview | Full (strict) |
| 프록시 | DNS 레코드 | 주황 구름 ON |
| 글 저장 | 구텐베르크에서 테스트 발행 | 오류 없음 |
| 실제 IP | 보안 플러그인 대시보드 | 방문자별 IP가 다르게 표시 |
| 봇 차단 | Security → Analytics → Events | 봇 요청 차단 확인 |
| 광고 노출 | 애드센스 보고서 | 여백 없음, 노출 범위 안정 |
| 페이지 속도 | PageSpeed Insights | 개선 전후 비교 |
| 검색 유입 | 서치콘솔 | 색인 오류 없음 |
서치콘솔을 반드시 함께 보세요. 챌린지 규칙을 잘못 걸면 구글봇이 차단될 수 있습니다. 클라우드플레어는 검증된 봇(Googlebot 등)을 자동으로 통과시키지만, 국가 규칙에 미국이 들어가 있으면 이야기가 달라집니다.
정리
클라우드플레어는 무료로도 워드프레스 운영의 질을 크게 바꿉니다. 다만 성패를 가르는 것은 기능을 얼마나 많이 켜느냐가 아니라 순서와 예외 처리입니다.
세 가지만 기억하세요.
첫째, SSL/TLS를 Full (strict)로 먼저 바꿉니다. 이걸 건너뛰면 나머지가 전부 무의미해집니다.
둘째, 무료 플랜의 커스텀 규칙은 5개입니다. 다 쓰지 말고 하나는 비워두세요.
셋째, Bot Fight Mode는 WAF 규칙으로 우회할 수 없습니다. 관리자 IP를 IP Access Rule로 허용하는 것이 무료 플랜의 정답입니다.
이 세 개만 지키면 나머지 설정은 문제없이 얹힙니다.
이 글은 2026년 11월 기준 클라우드플레어 대시보드와 공식 문서를 참고해 작성했습니다. 클라우드플레어는 대시보드 구조를 자주 개편하므로, 메뉴 위치가 다르면 검색창에 기능명을 입력해 찾으시면 됩니다. 서버 환경(호스팅 종류, PHP 버전, 사용 플러그인)에 따라 결과가 달라질 수 있습니다.

