通过Cloudflare Workers反代,实现网站单双日负载均衡
通过Cloudflare Workers反代,实现网站单双日负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| // 单日 const SingleDay = 'example_1.com' // 双日 const DoubleDay = 'example_2.com' // 一切给CF代理,true/false const CFproxy = true
// 只改上面,下面不用动
addEventListener('fetch', event => { let nd = new Date(); if (nd.getDate()%2) { host = SingleDay } else { host = DoubleDay } if (!CFproxy) { let url=new URL(event.request.url); if (url.protocol == 'http:') { url.protocol = 'https:' response = Response.redirect(url.href); event.respondWith( response ); } else { url.hostname=host; let request=new Request(url,event.request); event.respondWith( fetch(request) ) } } else { event.respondWith( fetchAndApply(event.request) ); } })
async function fetchAndApply(request) { let response = null; let url = new URL(request.url); if (url.protocol == 'http:') { url.protocol = 'https:' response = Response.redirect(url.href); return response; } url.host = host;
let method = request.method; let body = request.body; let request_headers = request.headers; let new_request_headers = new Headers(request_headers);
new_request_headers.set('Host', url.host); new_request_headers.set('Referer', request.url);
let original_response = await fetch(url.href, { method: method, body: body, headers: new_request_headers });
response = new Response(original_response.body, { status: original_response.status, headers: original_response.headers })
return response; }
|