使用Cloudflare Workers 反代花生壳动态域名

一、简介

在家里搭建了个小笔记,由于没有固定IP,只能使用花生壳动态域名,域名比较难记
http://****t.oicp.net:65530
http://****t.oicp.net:65530/vip.html   #首页及资源访问

二、需求

1、使用Cloudflare免费的Workers,当访问 https://note.***.workers.dev/vip.html 时,能够“跳转”到家里的目标资源,并且隐藏 源URL;
2、绑定自己的域名,并且使用CF CDN (如有ICP备案,用腾讯云CDN更省事,回源地址直接填写花生壳的域名和端口,不用这么折腾);
3、动态IP更新完成后,仍能正常访问。

三、实现

1. 隐形跳转

在Cloudflare Workers 中使用代理(即反向代理),通过代理请求并将响应返回给用户,用户只能看到 https://note.***.workers.dev/,但实际上它是在请求另一个服务器上的资源。

2. 文件访问的透明代理

在 Workers 中使用 fetch() 来转发请求并返回文件内容。

这样,虽然用户访问的是 https://note.***.workers.dev/vip.html,但实际上从 http://****t.oicp.net:65530/vip.html 拉取并展示内容。

3、完整代码示例

以下是实现上述功能的代码:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  // 目标服务器的基础URL
  const targetOrigin = 'http://****t.oicp.net:65530';

  // 获取原始请求的路径和查询字符串
  const { pathname, search } = new URL(request.url);

  // 构建目标URL
  const targetUrl = new URL(pathname + search, targetOrigin);

  // 复制原始请求的方法、头信息等,并修改为目标URL发起请求
  const response = await fetch(targetUrl.href, request);

  // 返回响应给客户端
  return new Response(response.body, response);
}
绑定自己的域名后,就能实现所需功能了:

解释:

  1. 隐形跳转: 用户访问 https://note.***.workers.dev/vip.html 时,Workers 会将请求转发到 http://****t.oicp.net:65530/vip.html,并将响应返回给用户,地址栏不会暴露源 URL。
  2. 文件代理: 在 targetUrl 中动态构造目标网站的 URL(包括路径和查询字符串),然后用 fetch() 请求目标 URL 的内容。
  3. 无自动重定向: 使用 redirect: 'manual' 可以避免如果目标页面存在重定向时,自动跳转到目标地址,从而保持原始的 URL。

注意事项:

  • 如果目标站点启用了 CORS(跨域资源共享),需要在响应中添加适当的 CORS 头来避免浏览器的安全限制。
  • 你也可以根据需要设置缓存头、Cookie 或其他请求头信息,以便更好地处理用户请求。