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
Reverse-Proxy Project (This demo may not be available in specific regions.)
-
Generate a new project.
wrangler generate my-workers-proxy https://github.com/Siujoeng-Lau/Workers-Proxy
- Configure your project's
wrangler.toml
file to prepare your project for deployment.
wrangler config
- Build and deploy on Cloudflare Workers.
wrangler build
wrangler publish
-
Navigate to Cloudflare Workers, register or sign in your Cloudflare account, and set custom subdomain for workers, and create a new Worker.
-
Customize 'src/index.js', paste the code into Cloudflare online editor to replace the default one.
-
Change name of your Worker, save and deploy it, and check whether its performance fulfills your demand.
-
Check whether your domain is currently under Cloudflare's protection.
-
Navigate to the dashboard of your domain, select 'Workers' page, and click on 'Add Route'.
-
Type
https://<domain_name>/*
inRoute
and select the Worker you created previously. -
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'.
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 = 'www.google.com'
// Custom pathname for the upstream website.
const upstream_path = '/'
// Website you intended to retrieve for users using mobile devices.
const upstream_mobile = 'www.google.com'
// 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 = ['0.0.0.0', '127.0.0.1']
// 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',
'//google.com': ''
}
If the website uses another domain name to serve static resources, users could deploy multiple Workers-Proxy and configure text replacement.
- www.google.com serve static resources on www.gstatic.com
- Deploy Workers-Proxy A to proxy www.gstatic.com
- Deploy Workers-Proxy B to proxy www.google.com
- Configure text replacement for Workers-Proxy B:
const replace_dict = {
'$upstream': '$custom_domain',
'www.gstatic.com': '<Domain name of Workers-Proxy A>'
}