리셀러 (화이트라벨)
관리자 내 위치: Customers › Resellers › List(
/resellers), Domains & SSL(/resellers/domains), Permissions & wholesale(/resellers/entitlements), Defaults(/resellers/settings). 리셀러 슬롯: System › Admin › License & updates(/license).
작동 내용
리셀러는 자체 도메인에서 자체 고객, 지갑, 가격 및 (선택적으로) 결제 채널을 갖춘 고객 포털의 브랜딩 사본을 제공받습니다. 리셀러는 귀하로부터 도매가로 구매하여 자체 가격으로 판매합니다. 리셀러의 고객은 귀하의 브랜드를 전혀 볼 수 없으며, 리셀러 도메인에서는 귀하의 관리자 콘솔을 열 수 없습니다. 리셀러는 https://partner.<your-domain>의 파트너 콘솔에서 비즈니스를 운영합니다.
요구 사항
| 항목 | 요구 사항 |
|---|---|
| 라이선스 | 커스텀 리셀러 도메인마다 라이선스에 리셀러 도메인 슬롯 1개가 필요합니다. 라이선스 페이지에 used/max 슬롯과 추가 구매 링크가 표시됩니다. 여유 슬롯이 없으면 도메인 추가 시 "Out of license reseller domain slots" 오류와 함께 실패합니다. |
| DNS | 각 리셀러 도메인은 귀하의 서버를 가리키도록 설정해야 합니다(아래 참조). |
| 웹 서버 및 TLS | 해당 호스트 이름의 유효한 인증서가 있는 리버스 프록시를 통해 호스트 이름이 NexCMP 패널에 연결될 수 있어야 합니다. |
| 이메일 | 초대 및 알림 이메일을 위한 SMTP가 구성되어 있어야 합니다. |
| 마스터 스위치 | Reseller settings › General › rs_enabled 항목은 기본적으로 켜져 있습니다. |
인프라 준비
서버의 퍼블릭 주소를 결정합니다. IPv4 주소 및 CNAME을 선호하는 경우 이를 가리키는 호스트 이름(예:
sites.cloud.example.com)입니다.Customers › Resellers › Defaults (
/resellers/settings)의 Domains & SSL 그룹을 열고 다음을 설정합니다:키 의미 rs_server_ipv4리셀러의 A 레코드가 가리켜야 하는 공인 IPv4. rs_cname_target리셀러의 CNAME 레코드가 가리켜야 하는 호스트 이름. rs_master_hosts자체 메인 사이트에 속하는 호스트 이름 (리셀러에게 부여할 수 없음). rs_platform_domain플랫폼 서브도메인용 상위 도메인(선택 사항, 예: partners.cloud.example.com를 통해 리셀러에게acme.partners.cloud.example.com제공). 비워두면 옵션이 비활성화됩니다.rs_sites_stale_minutes인증서 서비스가 만료된 것으로 간주하기 전의 시간(분, 기본값 15). rs_ssl_fail_hours오류가 발생하기 전의 실패 시도 시간(시간, 기본값 48). 지침을 전송하기 전에 이 값들을 확인하세요
rs_server_ipv4,rs_cname_target,rs_master_hosts에는 예시 값이 기본으로 포함되어 있습니다. 리셀러에게 DNS 지침을 제공하기 전에 사용자의 서버 및 도메인으로 교체하세요. 그렇지 않으면 화면의 지침이 잘못된 곳을 가리키게 됩니다.Save를 클릭합니다 (사유 입력이 필요합니다).
리버스 프록시가 리셀러 호스트 이름을 NexCMP 패널로 전달하고 각각에 대한 인증서를 제공하는지 확인하세요. 설치 프로그램은 메인 도메인(및 해결되는
admin.및partner.이름)에 대해서만 nginx와 Let's Encrypt를 구성합니다. Cloudflare를 사용하는 경우 호스트 이름을 프록시하고 Full SSL 모드를 사용하세요.
NexCMP에서 연결
리셀러 생성
Customers › Resellers › List를 열고 New reseller를 클릭합니다. 마법사는 8단계로 구성되어 있으며 마지막에 모든 항목을 프로비저닝합니다. 각 단계는 안전하게 다시 시도할 수 있습니다.
단계 입력 내용 Reseller 법인명 또는 상호, 슬러그(4~31자의 a~z, 0~9 또는 -, 문자로 시작하며 인프라 접두사로도 사용됨), 담당자 이름, 이메일 및 전화번호, 기본 언어, 리셀러의 결제 세부 정보 (크레딧 충전 구매자 기준).Console account 사용자 이름, 계정 이메일, 전체 이름; 이메일로 일회용 초대 링크 전송(72시간 유효, 권장) 또는 임시 비밀번호 1회 표시. Brand 브랜드 이름, 단축 이름, 태그라인, 기본 색상, 지원 이메일 및 전화번호, 고객 인쇄용 인보이스에 표시되는 판매자 이름, 로고(밝은 배경 및 어두운 배경), 정사각형 마크 및 파비콘: PNG, JPEG, WEBP 또는 ICO(최대 256 KB, SVG 불가). Domains 또한 www가 포함된 고객 도메인, 기본 도메인, 테스트 도메인(sslip.io) 및 dry-run 옵션 또는 플랫폼 서브도메인. 마법사는 DNS OK / DNS not ready 및 생성해야 할 레코드를 표시합니다. Pricing & wallet 도매 할인율(%), 리테일 하한선(리스트 가격의 %), 기본 마크업(%), 크레딧 한도, 초기 잔액, 잔액 부족 알림, 고객·VM·도메인 한도, 사이트 기능(고객 가입, DDoS 보호, 지원 티켓, 커스텀 플랜, 리사이즈, Auto Scaling)입니다. Payment channels 고객 결제 수금 주체(아래 참고) 및 선택 사항인 자체 PayPal 및 자체 베트남 은행 송금입니다. Email 발신자 이름 및 회신 주소(Reply-To). From 주소는 리셀러 도메인용 DKIM이 설정될 때까지 플랫폼 주소로 유지됩니다. Review 모든 내용을 확인한 후 Provision everything을 클릭하거나 **Save draft (provision later)**를 선택하세요. 프로비저닝은 백그라운드에서 계속 진행됩니다(30초마다). 리셀러를 열어 진행 상황을 확인하고, 단계가 실패한 경우 Continue provisioning 또는 Retry를 사용하세요.

DNS 지정(리셀러가 수행)
리셀러(또는 귀하)는 Domains & SSL 탭에 표시된 레코드를 생성합니다.
| Record | Name | 값 |
|---|---|---|
| TXT (소유권 확인, 최초 1회만) | _site-verify.<domain> | sv=<token> 화면에 표시됨 |
A (shop.example.net 등 루트 도메인) | the domain | your rs_server_ipv4 |
CNAME (cloud.example.net 등 하위 도메인) | the domain | your rs_cname_target (또는 rs_server_ipv4에 대한 A 레코드) |
| CNAME (선택 사항) | www.<domain> | your rs_cname_target |
추가 사항:
- 서버가 해당 IPv6 주소로 응답하지 않는 한 모든 AAAA (IPv6) 레코드를 제거하세요.
- 도메인이 인증되는 동안 CDN 프록시를 꺼짐(회색 구름)으로 설정하세요.
- 도메인에 CAA 레코드가 있는 경우
letsencrypt.org을(를) 허용하세요.
TXT 레코드의 토큰은 도메인마다 다르므로 화면에서 복사해야 합니다. 시스템은 처음 48시간 동안은 5분마다, 이후에는 매시간 DNS를 재확인하며, 72시간이 지나도 TXT 레코드가 누락된 도메인은 해제합니다.
도메인 상태
Customers › Resellers › Domains & SSL (모든 리셀러) 및 리셀러의 Domains & SSL 탭에서 확인할 수 있습니다:
| 상태 | 의미 |
|---|---|
pending_verify | TXT 레코드를 대기 중입니다. |
pending_dns / verifying | A 또는 CNAME 레코드가 귀하를 가리키기를 대기 중입니다. |
issuing | 인증서가 발급되는 중입니다. |
active | 리셀러 사이트를 서빙 중입니다. |
cert_expiring | 인증서 만료가 임박했으며 갱신이 예상됩니다. |
dns_lost | DNS가 더 이상 귀하를 가리키지 않습니다. 30일 후 도메인이 제거됩니다. |
error | 오류 코드를 확인하고 문제를 수정한 후 Retry를 누르세요. |
removing / removed | 제거되는 중이며 라이선스 슬롯이 반환됩니다. |
행 작업: Check now, Retry, Make primary, Test mode (테스트 도메인용), Remove.
권한 및 도매
Customers › Resellers › Permissions & wholesale(/resellers/entitlements)은 리셀러당 한 행으로 구성된 매트릭스이며, 도매 할인율(discount), 마크업(markup) 및 서비스별 스위치(예: DDoS Shield 및 VPN)가 포함됩니다. 스위치는 플랫폼 전체 기능이 켜져 있을 때 편집할 수 있으며, 그렇지 않은 경우 셀이 읽기 전용으로 표시되고 설정으로 연결됩니다. Top-up codes 하위 탭에서는 각 리셀러가 월에 발행할 수 있는 코드 수를 설정합니다 (Promotions 참조).
가격 규칙:
- 도매가 = 정가 x (1 - 할인율)이며, 리셀러의 Wholesale pricing 탭에서 플랜별 및 결제 주기별로 재정의할 수 있습니다.
- 리셀러가 소매가를 설정하며 최저 기준(정가의 백분율) 아래로 내려갈 수 없습니다.
- 고객이 구매할 때 리셀러의 **지갑(wallet)**에서 도매가가 결제됩니다. 지갑에는 크레딧 한도, 유예 기간 및 초과 한도가 적용됩니다 (Defaults 참조).
기본값
Customers › Resellers › Defaults(/resellers/settings)는 모든 리셀러에게 적용되는 rs_* 키입니다. 변경할 때마다 사유를 묻고 감사(audit) 기록이 남습니다.
| 그룹 | 키 | Default | 의미 |
|---|---|---|---|
| General | rs_enabled | 1 | 리셀러 프로그램 사용. |
rs_platform_collect_enabled | 0 | 플랫폼이 리셀러를 대신하여 고객 결제를 수금할 수 있도록 허용합니다. 법적 검토 후에만 활성화하세요. | |
rs_totp_required | 1 | 리셀러 콘솔 계정은 2단계 인증을 사용해야 합니다. | |
rs_agreement_version | 1 | 수락해야 하는 리셀러 약관의 버전입니다. | |
| 기본 가격 책정 | rs_default_discount_bp | 2000 (20 %) | 신규 리셀러 도매 할인 (베이시스 포인트, 0~9000). |
rs_default_markup_bp | 2500 (25 %) | 기본 마크업 (0~50000). | |
rs_default_floor_bp | 9000 (90 %) | 소매 하한선 (0~20000). | |
rs_default_max_domains | 3 | 리셀러당 허용되는 도메인 수. | |
| 지갑 및 지급 | rs_grace_hours | 72 | 리셀러 지갑 잔액 부족으로 인해 고객 서비스에 영향이 가기 전의 유예 기간. |
rs_overdraft_cap_cents | 5000 | 지갑 초과 인출 허용 여부. | |
rs_retention_days | 14 | 폐쇄된 리셀러의 VM이 삭제되기까지의 일수. | |
rs_payout_hold_days | 30 | 수수료를 출금할 수 있게 되기까지 보관되는 일수. | |
rs_payout_min_cents | 5000 | 최소 출금 금액. | |
rs_topup_min_cents | 2000 | 리셀러의 최소 지갑 충전 금액. | |
| 결제 및 메일 | rs_webhook_base | 비어 있음 | 리셀러 게이트웨이 웹훅을 위한 공개 기본 URL (비어 있음 = 사이트 URL 사용). |
rs_mail_from | 비어 있음 | 리셀러 이메일의 보낸 사람 주소. | |
rs_invoice_show_processor | 1 | 인보이스에 결제 대행사를 표시합니다. | |
rs_gw_stripe_enabled, rs_gw_usdt_enabled | 1 | 리셀러가 자체 Stripe 또는 USDT를 구성할 수 있는지 여부. |
고객 결제 수금 주체
| 모드 | 의미 |
|---|---|
| 리셀러 수금 (자체 채널) — 기본값 | 리셀러가 자체 Stripe, PayPal, USDT 또는 은행 계좌를 연결합니다. 웹훅은 https://<reseller-domain>/v1/billing/<gateway>/webhook/r/<id>입니다. 저장된 카드 및 auto top-up은 이러한 사이트에서 사용할 수 없습니다. |
| 플랫폼 수금 | 귀하의 채널이 리셀러 사이트에 표시됩니다. rs_platform_collect_enabled = 1까지 잠겨 있습니다. |
| 혼합 | 채널별로 선택하는 조합. |
리셀러에게 표시되는 내용
https://partner.<your-domain>의 파트너 콘솔에는 개요, 보고서, 고객, VM, 티켓, 주문, 결제, 가격, 브랜드, 랜딩 및 법률, 도메인 및 SSL, 이메일, 지갑, 결제 채널이 있습니다. 콘솔 계정은 reseller (전체) 또는 staff (읽기 전용) 역할을 가집니다. 직접 확인하려면 리셀러를 열고 Sign in to partner console을 클릭하세요. 60분 동안 진입하며, 모든 쓰기 작업은 관리자 로그와 리셀러 로그 모두에 이름과 함께 기록되고, 자금 관련 작업은 두 번째 확인이 필요합니다.
확인
- 프로비저닝 후 리셀러의 목록 행에 active와 녹색 Provisioning 열이 표시됩니다.
- 브라우저에서 리셀러의 도메인을 엽니다. 리셀러 고유의 브랜드가 적용된 로그인 페이지가 나타납니다.
https://<reseller-domain>/admin은(는) 404를 반환합니다. - 해당 도메인에서 테스트 고객으로 가입합니다. Customers › List에서 Site 열에 리셀러가 표시된 고객을 확인할 수 있습니다.
- 라이선스 페이지에 사용 중인 슬롯이 1개 늘어난 것으로 표시됩니다.
한도 및 참고 사항
- 커스텀 또는 테스트 도메인당 1개의 라이선스 슬롯이 사용되며, 플랫폼 서브도메인은 슬롯을 소모하지 않습니다.
- 리셀러를 일시 중단해도 데이터는 유지되며, Close reseller는 모든 도메인 슬롯을 반환하고 VM 삭제는 보존 기간이 지난 후에만 허용됩니다.
- 리셀러의 고객은 내 고객 목록에 표시되며 다른 고객과 마찬가지로 가장하여 로그인할 수 있습니다(링크는 리셀러의 도메인에서 열림).
- 리셀러는 나의 결제 채널, 기본 할당량 또는 다른 리셀러를 보거나 변경할 수 없습니다.
Troubleshooting
| 증상 | 원인 | 해결 방법 |
|---|---|---|
| "라이센스 리셀러 도메인 슬롯 초과" | 모든 슬롯 사용됨 | 슬롯을 확보(도메인 제거)하거나 라이선스 페이지에서 추가로 구매하세요. |
pending_verify 상태인 도메인 | TXT 레코드 누락 | 표시된 대로 정확히 TXT 레코드를 생성하고 Check now을(를) 사용하세요. |
pending_dns 상태인 도메인 | A/CNAME이 본인을 가리키지 않거나, AAAA 레코드가 있거나, CDN 프록시가 켜져 있음 | DNS를 수정하고 프록시를 끈 다음 Check now을(를) 클릭하세요. |
error 상태 | 행의 코드 확인(예: Let's Encrypt를 차단하는 CAA, 속도 제한) | 문제를 해결하고 Retry을(를) 클릭하세요. |
| 브라우저에 알 수 없는 호스트 또는 "421" 오류가 표시됨 | 호스트 이름이 라이선스에 없거나 패널로 라우팅되지 않음 | 리셀러를 통해 도메인을 추가하고(슬롯 소모) 리버스 프록시를 수정하세요. |
| 지침에 잘못된 IP 또는 호스트가 표시됨 | rs_server_ipv4 / rs_cname_target에 여전히 샘플 값이 있음 | Defaults에서 설정하세요. |
| 리셀러가 플랫폼 수금을 활성화할 수 없음 | 잠김 | 법적 검토 후 rs_platform_collect_enabled을(를) 설정하세요. |