Cloudflare
Cloudflare는 방문자가 보안 검사를 통과해야 사이트에 접속할 수 있도록 보호합니다. 브라우저는 이 검사를 자동으로 통과합니다. WCPOS 앱은 브라우저가 아닙니다. 매장의 REST API와 통신하는데, Cloudflare가 데이터 대신 보안 검사 페이지를 응답으로 보내면 앱이 연결할 수 없습니다.
이 페이지에서는 문제를 알아보는 방법과 Cloudflare가 앱의 접속을 허용하도록 설정하는 방법을 설명합니다. 여기의 모든 단계는 매장 소유자 또는 사이트의 Cloudflare 계정을 관리하는 담당자를 위한 것입니다.
문제 확인 방법
- 연결 화면에 오류 코드 HOST121와 함께 "이 매장의 호스팅 설정이 앱을 차단하고 있습니다" 라고 표시됩니다.
- 데스크톱 앱이 연결 또는 동기화 중에 "your-store.com 보안 검사" 라는 작은 창을 엽니다.
- 이전 버전에서는 사이트가 분명히 온라인인데도 "사이트가 WordPress 사이트가 아닌 것 같습니다" 또는 "사이트 응답 시간이 너무 깁니다" 라고 표시했습니다.
- 클라우드 인쇄가 중단되고 "보안 서비스가 WCPOS Cloud Print를 차단하고 있습니다"라는 메시지가 표시됩니다.
확인하려면 터미널을 열고 다음 명령을 실행하세요:
curl -sI https://your-store.com/wp-json/
차단된 매장은 403 상태와 cf-mitigated: challenge 헤더를 응답으로 보냅니다. 정상 매장은 200과 content-type: application/json을 응답으로 보냅니다. 404가 표시되면 사이트에서 예쁜 고유주소를 사용하지 않는 것입니다. 대신 'https://your-store.com/?rest_route=/'를 대상으로 같은 검사를 실행하세요. WordPress가 하위 폴더에 설치되어 있다면 https://example.com/shop/wp-json/처럼 폴더 경로를 포함하세요.
최신 데스크톱 앱은 가능한 경우 작은 창에서 Cloudflare 검사를 완료합니다. 덕분에 매장 운영을 계속할 수 있지만, Cloudflare가 부여한 통과 허가는 만료되며(기본값 30분) 검사가 다시 표시됩니다. 이 창은 임시방편으로만 여기고 아래 해결 방법을 적용하세요.
차단을 일으키는 Cloudflare 기능 확인
해결 방법은 앱에 검사를 요구하는 기능에 따라 다릅니다. 사이트의 Cloudflare 대시보드에서 다음 항목을 확인하세요. Cloudflare 메뉴가 변경되어 이전 메뉴 위치도 괄호 안에 표시했습니다.
| 기능 | 위치 | API 예외 처리 가능 여부 |
|---|---|---|
| Bot Fight Mode (Free 플랜) | Security → Settings → Bot traffic (이전 대시보드: Security → Bots) | 아니요. Cloudflare에서는 Skip 또는 Allow 규칙으로 이 기능을 우회할 수 없습니다. 기능을 끄거나 Pro로 업그레이드한 뒤 아래 Skip 규칙으로 예외 처리할 수 있는 Super Bot Fight Mode를 사용하세요. |
| Under Attack Mode | 사이트 Overview의 "Under Attack Mode" 전환 버튼 또는 Security → Settings | 가능합니다. 아래 Skip 규칙은 Under Attack Mode가 높이는 Security Level을 건너뜁니다. 공격이 끝난 뒤 Under Attack Mode를 끄는 방법도 있습니다. |
| Super Bot Fight Mode (Pro 이상) | Security → Settings → Bot traffic (이전 대시보드: Security → Bots) | 가능합니다. 아래 Skip 규칙을 사용하세요. |
| _Managed Challenge_로 설정된 WAF 사용자 지정 규칙 또는 관리형 규칙 | Security → Security rules (이전 대시보드: Security → WAF) | 가능합니다. 아래 Skip 규칙을 검사를 요구하는 사용자 지정 규칙보다 위에 배치하세요. 관리형 규칙은 항상 사용자 지정 규칙 뒤에 실행되므로 순서는 상관없습니다. |
공식 Cloudflare WordPress 플러그인으로 Under Attack Mode를 전환하고 WAF를 켤 수 있지만, Skip 규칙은 만들 수 없습니다. Skip 규칙은 Cloudflare 대시보드에서 설정해야 합니다.
REST API용 Skip 규칙 추가
Bot Fight Mode를 제외한 모든 경우에 이 방법으로 해결할 수 있습니다. 이 규칙은 Cloudflare가 매장의 REST API 요청에 검사를 요구하지 않도록 합니다. 해당 엔드포인트는 WordPress 자체의 로그인 및 권한 검사로 계속 보호됩니다.
-
Cloudflare 대시보드에서 사이트를 연 다음 Security → Security rules (이전 대시보드: Security → WAF → Custom rules)로 이동하고 Create rule → Custom rules를 선택하세요.
-
규칙 이름을
WCPOS REST API로 지정하세요. -
When incoming requests match에서 Edit expression을 선택하고 다음을 붙여 넣으세요:
(starts_with(http.request.uri.path, "/wp-json/")) or (http.request.uri.path eq "/" and (starts_with(http.request.uri.query, "rest_route=") or http.request.uri.query contains "&rest_route="))두 번째 부분은 WordPress의 대체 주소인
/?rest_route=/...와 사이트 루트에서만 일치합니다. 따라서 다른 페이지의 쿼리에rest_route=문자열이 들어 있어도 해당 페이지의 보호가 해제되지 않습니다. WordPress가https://example.com/shop같은 하위 폴더에 설치되어 있다면/wp-json/및/대신/shop/wp-json/및/shop/을 사용하세요. -
Then take action에서 Skip을 선택하세요.
-
All remaining custom rules를 선택하세요. 건너뛸 구성 요소 목록에서 All Super Bot Fight Mode rules와 Security Level을 선택하세요. 관리형 규칙이 차단 원인인 경우에만 All managed rules를 선택하고, "(Previous version)"이라고 표시된 항목은 그대로 두세요.
-
규칙을 배포하세요. 검사를 요구하거나 차단하는 다른 사용자 지정 규칙이 있다면 이 규칙이 그 규칙보다 위에 오도록 정렬하세요.
curl 검사를 다시 실행하세요. cf-mitigated 헤더가 사라지고 응답이 JSON이어야 합니다.
Skip 규칙을 추가했는데도 curl 검사에 검사가 표시되고 Bot Fight Mode가 켜져 있다면 원인은 Bot Fight Mode입니다. Free 플랜에서는 Security → Settings → Bot traffic에서 기능을 끄는 방법만 사용할 수 있습니다. Cloudflare 공식 문서에서도 어떤 규칙으로도 우회할 수 없다고 확인하고 있습니다. Bot Fight Mode가 이미 꺼져 있다면 계속 차단되는 경우를 참고하세요.
캐싱
Cloudflare가 REST API 응답을 캐시하면 앱에 오래된 상품과 주문이 표시될 수 있습니다. 위의 Skip 규칙은 캐싱을 변경하지 않습니다. HTML 페이지에 Cloudflare 캐시를 사용하거나 Automatic Platform Optimization을 사용하는 경우, 같은 표현식에 Bypass cache를 설정하는 Cache Rule을 추가하세요.
계속 차단되나요?
Skip 규칙이 초안으로 저장된 상태가 아니라 배포되었는지, IP Access 규칙이 POS 단말의 네트워크를 차단하지 않는지 확인하세요. 사이트 앞단에 있는 다른 서비스도 Cloudflare와 같은 방식으로 작동합니다. 보안 플러그인은 플러그인 충돌을, GoDaddy와 WP Engine 등의 호스팅은 호스팅 안내를 참고하세요.