Skip to main content

A rotating HTTPS proxy server that routes outbound requests through a pool of external proxy IP addresses — with automatic retries, failure tracking, and IP quarantine.

Open SourceSelf HostableDocker ReadyNo cloud required

The problem

When your application needs to make outbound HTTP requests at scale — scraping, API polling, data collection — you run into rate limits, IP blocks, and connection failures. Managing a pool of proxy IPs manually means writing retry logic, tracking which IPs are healthy, rotating through them fairly, and handling failures gracefully. Every project reinvents this wheel.

Proxy Hopper solves it once, as a standalone service.

Proxy Hopper architecture

How it works

1

Configure your proxy providers and targets

Define your external proxy IPs — grouped by provider with credentials and region tags. Set targets as URL regex patterns, each with its own pool, rate limit, and retry policy.
2

Point your application at Proxy Hopper

Add one header to your HTTP requests: X-Proxy-Hopper-Target set to the real destination. No changes to your application logic.
3

Proxy Hopper handles the rest

IP rotation, rate limiting between requests, automatic quarantine of failing IPs, retries on failure, and health probing in the background.

Key features

IP rotation

Each target maintains its own FIFO queue. IPs are held off the pool between requests to respect rate limits.

Automatic quarantine

IPs that accumulate failures are quarantined automatically and released back into rotation after a configurable timeout.

Per-target policies

Different targets can have different rate limits, retry counts, and quarantine thresholds — match the policy to the API.

Full retry support

Proxy Hopper owns the HTTPS connection end-to-end, so it can retry any failed request on a different IP — including mid-flight 429s and 5xx errors.

Redis HA

In-memory backend for single-instance deployments. Redis backend for multi-instance HA with shared pool state.

Prometheus metrics

Full observability — request rates, retry counts, queue depth, quarantine events, and per-IP probe status.

Get started

# config.yaml
targets:
  - name: general
    regex: '.*'
    ipList:
      - "10.0.0.1:3128"
      - "10.0.0.2:3128"
    minRequestInterval: 1s
    numRetries: 3
docker run -v $(pwd)/config.yaml:/etc/proxy-hopper/config.yaml \
  -p 8080:8080 \
  ghcr.io/cams-data/proxy-hopper:latest
import requests
session = requests.Session()
session.headers["X-Proxy-Hopper-Target"] = "https://api.example.com"
resp = session.get("http://localhost:8080/v1/endpoint")

Full quick start

Step-by-step guide with providers, pools, and a first proxied request.

Docker images

Pre-built multi-arch images for amd64 and arm64.

Deployment options

Single container

In-memory backend. Zero external dependencies. Good for development and single-host deployments.

Docker Compose + Redis

Redis backend. Survives restarts. Scale to multiple replicas sharing a single IP pool.

Kubernetes

Official Helm chart — Deployment, HPA, Redis subchart, ServiceMonitor. Scales automatically with traffic.

Free and open source. Forever.

Proxy Hopper is MIT licensed and built for self-hosting. No SaaS, no usage fees, no data leaving your infrastructure. Run it on a single container or scale it across a Kubernetes cluster — you own the deployment entirely.

Contributions, bug reports, and feature requests are welcome on GitHub.

# Memory backend (default)
docker pull ghcr.io/cams-data/proxy-hopper:latest

# Redis backend
docker pull ghcr.io/cams-data/proxy-hopper:latest-redis