Skip to content

rover0811/cloudflare_proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cloudflare Proxy

Cloudflare Workers를 활용한 IP 로테이션 프록시 서버

왜 만들었나?

"프록시 서비스 비용을 내기 싫은데 IP rolling을 어떻게 구현할 것인가?"에 대한 의문에서 시작해서 Cloudflare Workers 무료 tier만으로 동일한 IP 로테이션 기능을 구현했습니다.

서비스 가격 요청 수
ScraperAPI $49/월 10만
ZenRows $69/월 25만 (기본)
Bright Data $499/월 Growth 플랜
이 프로젝트 $0 N × 10만/일

Cloudflare Workers 무료 tier로 동일한 IP 로테이션을 구현합니다.

왜 Cloudflare Workers인가?

플랫폼 무료 한도 IP 다양성 제약
Cloudflare Workers 10만 요청/일/Worker 에지 노드별 다른 IP CONNECT 미지원
AWS Lambda 100만 요청/월 NAT Gateway IP 고정 비용 발생
Vercel/Netlify 제한적 IP 풀 작음 상업적 사용 제한

Cloudflare 선택 이유:

  • Worker 개수 무제한 → N개 Worker = N × 10만 요청/일
  • 전 세계 300+ 에지 노드 → 다양한 IP 풀
  • 완전 무료 (Free tier)

아키텍처

flowchart LR
    A[Client] -->|X-Target-Url| B[Main Server]
    B -->|라운드로빈| C1[Worker 1]
    B -->|라운드로빈| C2[Worker 2]
    B -->|라운드로빈| CN[Worker N]
    C1 -->|fetch| D[Target]
    C2 -->|fetch| D
    CN -->|fetch| D
Loading
  1. 클라이언트 → Main Server (인증, Worker 선택)
  2. Main Server → Worker (라운드로빈)
  3. Worker → 대상 서버 (fetch())
  4. 각 Worker는 다른 Cloudflare 에지 IP 사용

사용법

import httpx

response = await client.get(
    "http://localhost:8000/proxy",
    headers={
        "X-Proxy-Key": "your_secret",
        "X-Target-Url": "https://httpbin.org/ip",
    },
)
print(response.json())  # {"origin": "104.28.xxx.xxx"}
curl -H "X-Proxy-Key: secret" \
     -H "X-Target-Url: https://ifconfig.me/ip" \
     http://localhost:8000/proxy

API

엔드포인트 설명
GET/POST/... /proxy 프록시 요청
GET /workers Worker 목록
GET /health 헬스체크

필수 헤더: X-Proxy-Key, X-Target-Url

응답 헤더: X-Proxy-Worker (사용된 Worker ID)

제한사항

  • 표준 프록시 형태 미지원 (proxies={"http": "..."}) - Cloudflare가 CONNECT 메서드 차단
  • WebSocket 미지원

프로젝트 구조

cloudflare_proxy/
├── server/                 # Main Server (FastAPI)
│   ├── main.py             # 프록시 엔드포인트
│   ├── proxy.py            # Worker 요청 전달
│   ├── pool_manager.py     # Worker Pool 관리
│   └── cloudflare_client.py # Cloudflare API
│
├── worker/                 # Cloudflare Worker
│   └── src/worker.js       # HTTP fetch 릴레이
│
├── tests/                  # 테스트
│   └── test_ip.py          # IP 로테이션 테스트
│
└── Makefile

설치 및 실행

환경 설정

cp .env.example .env
PROXY_SECRET=your_secret_key
CF_API_KEY=your_global_api_key
CF_EMAIL=your@email.com
CF_ACCOUNT_ID=your_account_id
CF_SUBDOMAIN=your_workers_subdomain

실행

make dev          # 서버 실행 (Worker 자동 배포)
python test_ip.py # 테스트

Cloud Run 배포

.env에 GCP 설정 추가:

GCP_PROJECT_ID=your_gcp_project_id
GCP_REGION=us-central1  # 무료 tier: us-central1, us-east1, us-west1
# 1. Artifact Registry 생성 (최초 1회)
gcloud artifacts repositories create cloudflare-proxy \
  --repository-format=docker \
  --location=us-central1

# 2. Docker 인증
gcloud auth configure-docker us-central1-docker.pkg.dev

# 3. 배포
make push        # 이미지 빌드 & 푸시
make infra-init  # Terraform 초기화 (최초 1회)
make deploy      # Cloud Run 배포

About

IP rotation proxy server with Cloudflare Workers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors