找回密码
 立即注册
CeraNetworksBGVM服务器主机交流IP归属甄别会员请立即修改密码
查看: 6|回复: 0

cf反代跳出cf加速域名

[复制链接]

14

主题

29

回帖

640

积分

高级会员

积分
640
发表于 2023-10-8 03:38:30 | 显示全部楼层 |阅读模式
aDomain.com通过cfworkers反代 bDomain.com,当我访问aDomain.com首页是正常的,但是点击网页的内容就跳出了aDomain.com到 bDomain.com
即:无法访问此网站,bDomain.com 的响应时间过长。

突发奇想头一回搞这个,求mjj指点一下


[ol]
  • // 替换成你想镜像的站点
  • const upstream = 'www.google.com'
  • // 如果那个站点有专门的移动适配站点,否则保持和上面一致
  • const upstream_mobile = 'www.google.com'
  • // 你希望禁止哪些国家访问
  • const blocked_region = ['RU']
  • // 禁止自访问
  • const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
  • // 替换成你想镜像的站点
  • const replace_dict = {
  •     '$upstream': '$custom_domain',
  •     '//www.google.com': ''
  • }
  • //以下内容都不用动
  • addEventListener('fetch', event => {
  •     event.respondWith(fetchAndApply(event.request));
  • })
  • async function fetchAndApply(request) {
  •     const region = request.headers.get('cf-ipcountry').toUpperCase();
  •     const ip_address = request.headers.get('cf-connecting-ip');
  •     const user_agent = request.headers.get('user-agent');
  •     let response = null;
  •     let url = new URL(request.url);
  •     let url_host = url.host;
  •     if (url.protocol == 'http:') {
  •         url.protocol = 'https:'
  •         response = Response.redirect(url.href);
  •         return response;
  •     }
  •     if (await device_status(user_agent)) {
  •         upstream_domain = upstream
  •     } else {
  •         upstream_domain = upstream_mobile
  •     }
  •     url.host = upstream_domain;
  •     if (blocked_region.includes(region)) {
  •         response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
  •             status: 403
  •         });
  •     } else if(blocked_ip_address.includes(ip_address)){
  •         response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
  •             status: 403
  •         });
  •     } else{
  •         let method = request.method;
  •         let request_headers = request.headers;
  •         let new_request_headers = new Headers(request_headers);
  •         new_request_headers.set('Host', upstream_domain);
  •         new_request_headers.set('Referer', url.href);
  •         let original_response = await fetch(url.href, {
  •             method: method,
  •             headers: new_request_headers
  •         })
  •         let original_response_clone = original_response.clone();
  •         let original_text = null;
  •         let response_headers = original_response.headers;
  •         let new_response_headers = new Headers(response_headers);
  •         let status = original_response.status;
  •         new_response_headers.set('access-control-allow-origin', '*');
  •         new_response_headers.set('access-control-allow-credentials', true);
  •         new_response_headers.delete('content-security-policy');
  •         new_response_headers.delete('content-security-policy-report-only');
  •         new_response_headers.delete('clear-site-data');
  •         const content_type = new_response_headers.get('content-type');
  •         if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
  •             original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);
  •         } else {
  •             original_text = original_response_clone.body
  •         }
  •         response = new Response(original_text, {
  •             status,
  •             headers: new_response_headers
  •         })
  •     }
  •     return response;
  • }
  • async function replace_response_text(response, upstream_domain, host_name) {
  •     let text = await response.text()
  •     var i, j;
  •     for (i in replace_dict) {
  •         j = replace_dict
  •         if (i == '$upstream') {
  •             i = upstream_domain
  •         } else if (i == '$custom_domain') {
  •             i = host_name
  •         }
  •         if (j == '$upstream') {
  •             j = upstream_domain
  •         } else if (j == '$custom_domain') {
  •             j = host_name
  •         }
  •         let re = new RegExp(i, 'g')
  •         text = text.replace(re, j);
  •     }
  •     return text;
  • }
  • async function device_status (user_agent_info) {
  •     var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
  •     var flag = true;
  •     for (var v = 0; v  0) {
  •             flag = false;
  •             break;
  •         }
  •     }
  •     return flag;
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|HS2V主机综合交流论坛

    GMT+8, 2024-5-10 04:52 , Processed in 0.036601 second(s), 3 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表