200字
基于阿里云eas边缘函数的万能反代玩法
2025-12-13
2025-12-14

亲测反代各种网站(有反爬虫的不行)
如docker

如加速镜像下载:

这种玩法有个缺点,反代的端口必须是80 443,如果是其他端口会报错

// ===================================================================
// 配置区域:只需修改这里即可切换代理目标
// ===================================================================

// 目标网站的完整 URL (必须包含协议 http:// 或 https://)
const TARGET_SITE = 'https://cn.ubuntu.com'; // <-- 【在这里修改你的目标网站】

// ===================================================================
// 代码区域:通常无需修改
// ===================================================================

export default {
  async fetch(request) {
    // 1. 解析原始请求
    const originalUrl = new URL(request.url);
    const targetUrl = new URL(TARGET_SITE);

    // 2. 构造新的请求 URL
    // 将原始请求的路径和查询参数拼接到目标域名上
    const backendUrl = `${targetUrl.origin}${originalUrl.pathname}${originalUrl.search}`;

    // 3. 创建新的请求对象
    // 复制原始请求的方法、头部、体等信息
    const newRequest = new Request(backendUrl, request);

    // 4. 【关键】设置 Host 头
    // 必须告诉后端服务器客户端原本想访问的域名,这对于虚拟主机路由至关重要。
    newRequest.headers.set('Host', targetUrl.hostname);

    // 5. 【可选】清理一些可能引起问题的头部
    // 某些网站可能会检查这些头部,如果来源不匹配会拒绝服务。
    // 移除它们可以让请求看起来更“原生”。
    newRequest.headers.delete('host'); // 删除可能存在的原始 host 头
    newRequest.headers.delete('referer');
    newRequest.headers.delete('origin');

    try {
      // 6. 发起对目标网站的请求
      console.log(`Forwarding request to: ${backendUrl}`);
      const response = await fetch(newRequest);

      // 7. 【可选】修改响应头
      // 创建一个新的响应对象,以便我们可以修改响应头
      const newResponse = new Response(response.body, response);

      // 处理跨域问题,如果目标网站没有设置 CORS,我们可以在这里添加
      newResponse.headers.set('Access-Control-Allow-Origin', '*');
      newResponse.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
      newResponse.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');

      // 防止缓存,方便调试
      newResponse.headers.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
      newResponse.headers.set('Pragma', 'no-cache');
      newResponse.headers.set('Expires', '0');

      return newResponse;

    } catch (error) {
      // 8. 错误处理
      console.error(`Failed to fetch ${backendUrl}. Reason: ${error.message}`);
      return new Response(`Proxy Error: Failed to connect to the target site. Reason: ${error.message}`, { status: 502 });
    }
  }
};

评论