Goal: ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΠΎΡΡΠΈΡΡ ΡΡΠ΅ΠΊΠΊΠ΅Ρ Π°ΡΡΠΈΠ»ΠΊΠΈ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅
ΠΡΠΈΡΠΈΠ½Π°: ΠΈΠ· Π·Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π² Π Π£ ΠΌΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅ΠΌ CloudFlare, ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π΄Π°ΡΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: Π°ΡΡΠΈΠ»ΠΊΠ° ΠΏΡΠΈΠ±ΠΈΡΠ° Π³Π²ΠΎΠ·Π΄ΡΠΌΠΈ ΠΊ CloudFlare
ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΊ Π°ΡΡΠΈΠ»ΠΊΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉ ΠΌΠΈΠΊΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ IP Π°Π΄ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ, ΡΠΎ Π² Π»ΠΎΠ³Π°Ρ Π°ΡΡΠΈΠ»ΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ³ΡΡΠΈΡΠΎΠ°ΡΡ ΠΈΠΏ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ip ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΌΠ°Π΅Ρ ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡΡ ΠΏΠΎ Π³Π΅ΠΎ ΠΈ Ρ.ΠΏ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° cloudflare workers:
export default async (
request: Request,
env: Env,
ctx: ExecutionContext,
): Promise<Response> => {
const rURL = new URL(request.url);
try {
const paths = rURL.pathname.split("/").filter(Boolean);
const affId = paths.at(-1);
const affReq = await fetch(env.AFFILKA_DOMAIN + affId, {
headers: request.headers,
redirect: "manual",
});
const originalRedirectURL = affReq.headers.get("location");
const redirectURL = new URL(originalRedirectURL);
for (const [key, value] of rURL.searchParams.entries()) {
if (!redirectURL.searchParams.has(key)) {
redirectURL.searchParams.append(key, value);
}
}
const finalRedirectUrl = redirectURL.toString();
const headers = {
Location: finalRedirectUrl,
};
const response = new Response(null, {
status: 302,
headers,
});
return response;
} catch (err) {
console.log(err, err.message);
return Response.redirect(rURL.origin, 302);
}
};
ΠΡΠΎΡΠΎΡΠΈΠΏ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ useragent, ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ (Π³Π΄Π΅ ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΡΠ΅Π³ΡΠ»ΡΡΠΎΡΠ° Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π²Π½Π΅ΡΡΠΈ ΡΡΠ΅ΠΊΠΊΠΈΠ½Π³ Π΄ΠΎΠΌΠ΅Π½ ΠΏΡΡΠΌΠΎ Π²Π½ΡΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ: https://ganamax.mx/aff/s085cda74). ΠΠΎ Π½Π΅ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ Π΄Π»Ρ CIS ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π»ΠΎΠΌΠ°Π΅Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π²Π½ΡΡΡΠΈ affilka.
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ real user ip Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅. Π ΠΏΡΠΈΠΌΠ΅ΡΡ: affilka-real-ip=8.8.8.8 Π’ΠΎΠ³Π΄Π° ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΈ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π°ΡΡΠΈΠ»ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° CF, Π½ΠΎ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ
ΠΏΠ»Π°ΡΡΠΎΠΌΡΠ°Ρ
(ΠΊΠ°ΠΊ-ΡΠΎ Fastly ΠΈΠ»ΠΈ CCDN).