Lightweight JavaScript reverse proxy built with Cloudflare Worker (1k+ Stars, 350+ Forks)


Issues | Pull requests | Contributors


Workers-Proxy is a lightweight Javascript Reverse Proxy based on Cloudflare Workers.

Users could deploy the reverse proxy on Cloudflare’s global network without setting up virtual private servers and configuring Nginx or Apache.


  • Build mirror websites
  • Improve loading speed with Cloudflare’s global network
  • Increase security (Hide IP addresses of websites)
  • Block specific areas or IP addresses
  • Redirect mobile users to different web pages


GitHub (This demo may not be available in specific regions.)

University of California, Los Angeles (UCLA)

Python Documentation

Getting Started

Build and Deploy

Deploy with Wrangler

  1. Install Wrangler.

  2. Generate a new project.

wrangler generate my-workers-proxy
  1. Configure your project’s wrangler.toml file to prepare your project for deployment.
wrangler config
  1. Build and deploy on Cloudflare Workers.
wrangler build
wrangler publish

Deploy manually

  1. Navigate to Cloudflare Workers, register or sign in your Cloudflare account, and set custom subdomain for workers, and create a new Worker.

  2. Customize ‘ src/index.js’, paste the code into Cloudflare online editor to replace the default one.

  3. Change name of your Worker, save and deploy it, and check whether its performance fulfills your demand.

Bind to Custom Domain

  1. Check whether your domain is currently under Cloudflare’s protection.

  2. Navigate to the dashboard of your domain, select ‘Workers’ page, and click on ‘Add Route’.

  3. Type https://<domain_name>/* in Route and select the Worker you created previously.

  4. Add a CNAME DNS record for your custom domain. Concretely, enter the subdomain (or ‘@’ for root) in the ‘Name’ field, enter the second level domain of your workers in the ‘Target’ field, and set ‘Proxy status’ to ‘Proxied’.

Customize index.js

Basically, there are a few constants on the top of the ‘index.js’ file.

To customize your own Workers-Proxy Service, you should edit these constants according to your demands.

// Website you intended to retrieve for users.
const upstream = ''

// Custom pathname for the upstream website.
const upstream_path = '/'

// Website you intended to retrieve for users using mobile devices.
const upstream_mobile = ''

// Countries and regions where you wish to suspend your service.
const blocked_region = ['CN', 'KP', 'SY', 'PK', 'CU']

// IP addresses which you wish to block from using your service.
const blocked_ip_address = ['', '']

// Whether to use HTTPS protocol for upstream address.
const https = true

// Whether to disable cache.
const disable_cache = false

// Replace texts.
const replace_dict = {
    '$upstream': '$custom_domain',
    '//': ''

Example Configurations

Websites with Multiple Domains

If the website uses another domain name to serve static resources, users could deploy multiple Workers-Proxy and configure text replacement.

  1. serve static resources on
  2. Deploy Workers-Proxy A to proxy
  3. Deploy Workers-Proxy B to proxy
  4. Configure text replacement for Workers-Proxy B:
const replace_dict = {
    '$upstream': '$custom_domain',
    '': '<Domain name of Workers-Proxy A>'
Xiaoyang Liu
Xiaoyang Liu
Incoming Freshman at UCLA
Software Engineer at Wortharead