לעצטע פאר חדשים האב איך אנגעהויבן ניצן קרעמל מיט א reverse proxy אויף א cloudflare worker
נ.ב. איך בין נישט קיין אייטי אדער סיי וואס איך האב פלעין געפאלגט עפעס א עי איי (איך געדענק שוין נישט וועלכע)
זאלן די קרעמלער וואס ווייסן וואס איך האב געטון אריינקומען ערקלערן
- גיי צו dash.cloudflare.com לאג אריין אין דיין אקאונט
- וועל אויס די אקאונט ווי דו ווילסט עס מאכן אויף
- אויף די לינקע זייט אונטער Build דריק compute דערנאך workers & pages
- דריק אויף create application
- וועל אויס א נאמען פאר די worker (קענסט לאזן די דיפאלט)
- דריק start with hello world
- דריק deploy
- דריק visit
- בעט דיין פילטער זאל עס עפענען - ווארט זיי זאלן עס עפענען
- דריק edit code
- פעיסט אריין די קאוד וואס איך ברענג דא אונטען
- טויש your_worker_domain צו די דאומעין וואס האסט געבעטן דיין פילטער צו עפענען (4דע ליין)
- דריק deploy
נ.ב. איך בין נישט קיין אייטי אדער סיי וואס איך האב פלעין געפאלגט עפעס א עי איי (איך געדענק שוין נישט וועלכע)
זאלן די קרעמלער וואס ווייסן וואס איך האב געטון אריינקומען ערקלערן
קאוד:
export default {
async fetch(request) {
const EXTERNAL_SITE = "kraimel.community.forum";
const WORKER_DOMAIN = "your_worker_domain";
const url = new URL(request.url);
url.hostname = EXTERNAL_SITE;
const newRequest = new Request(url, request);
newRequest.headers.set("Host", EXTERNAL_SITE);
let response = await fetch(newRequest);
// 1. CLONE HEADERS
let newHeaders = new Headers(response.headers);
// 2. FIX REDIRECTS (Location Header)
let location = newHeaders.get("Location");
if (location) {
newHeaders.set("Location", location.replace(EXTERNAL_SITE, WORKER_DOMAIN));
}
// 3. FIX COOKIES (Set-Cookie Header)
const setCookie = newHeaders.get("Set-Cookie");
if (setCookie) {
newHeaders.set("Set-Cookie", setCookie.replace(new RegExp(EXTERNAL_SITE, 'g'), WORKER_DOMAIN));
}
// 4. PREVENT HSTS REDIRECTS
newHeaders.delete("Strict-Transport-Security");
// 5. CONTENT REWRITING
const contentType = response.headers.get("Content-Type") || "";
if (contentType.includes("text/html")) {
let transformedResponse = new HTMLRewriter()
.on("a", new AttributeRewriter("href", EXTERNAL_SITE, WORKER_DOMAIN))
.on("form", new AttributeRewriter("action", EXTERNAL_SITE, WORKER_DOMAIN))
.on("script", new AttributeRewriter("src", EXTERNAL_SITE, WORKER_DOMAIN))
.on("img", new AttributeRewriter("src", EXTERNAL_SITE, WORKER_DOMAIN))
.on("img", new AttributeRewriter("srcset", EXTERNAL_SITE, WORKER_DOMAIN))
.on("source", new AttributeRewriter("srcset", EXTERNAL_SITE, WORKER_DOMAIN))
.transform(response);
return new Response(transformedResponse.body, {
status: response.status,
headers: newHeaders
});
}
// Handle JS/JSON text replacement
if (contentType.includes("javascript") || contentType.includes("json")) {
let text = await response.text();
let modifiedText = text.replace(new RegExp(EXTERNAL_SITE, 'g'), WORKER_DOMAIN);
return new Response(modifiedText, { headers: newHeaders });
}
return new Response(response.body, { headers: newHeaders });
}
};
class AttributeRewriter {
constructor(attributeName, oldVal, newVal) {
this.attributeName = attributeName;
this.oldVal = oldVal;
this.newVal = newVal;
}
element(element) {
const attribute = element.getAttribute(this.attributeName);
if (attribute) {
element.setAttribute(this.attributeName, attribute.replace(new RegExp(this.oldVal, 'g'), this.newVal));
}
}
}
לעצט רעדאגירט: