亲测反代各种网站(有反爬虫的不行)
如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 });
}
}
};