<पी> इस पोस्ट में, हम दिखाएंगे कि किसी देश से अपने वेब ऐप पर ट्रैफ़िक को कैसे रोका जाए। आप अन्य फ़िल्टर (आईपी पता, उपयोगकर्ता-एजेंट आदि) के साथ ट्रैफ़िक प्रबंधित करने के लिए समान तर्क लागू कर सकते हैं। हमारा लक्ष्य एक वियुग्मित, हल्का और गतिशील समाधान है: - मुझे देश को अपडेट करने के लिए कोड को अपडेट और तैनात करने की आवश्यकता नहीं होनी चाहिए।
- मेरे आवेदन पर इसका न्यूनतम ओवरहेड और लागत होनी चाहिए।
<पी> हम वर्सेल एज मिडलवेयर और अपस्टैश एज फ्लैग्स का उपयोग करेंगे। वर्सेल एज मिडलवेयर
<पी> वर्सेल एज मिडलवेयर एक कोड है जो बैकएंड द्वारा संसाधित होने से पहले वेब अनुरोधों को रोकता है। हम इसका उपयोग देश और उपयोगकर्ता एजेंट की जांच करने के लिए करेंगे क्योंकि: - यह तेज़ और सस्ता है।
- आपके एप्लिकेशन से अलग कर दिया गया।
अपस्टैश एज फ़्लैग्स
<पी> वास्तव में आप नीचे दिए गए अनुसार अपने एज मिडलवेयर कोड में एक सरल if स्टेटमेंट के साथ देश की जांच कर सकते हैं और ट्रैफ़िक को ब्लॉक कर सकते हैं: const BLOCKED_COUNTRY = "BAD_COUNTRY";
export function middleware(req: NextRequest) {
const country = req.geo.country;
if (country === BLOCKED_COUNTRY) {
return new Response("Blocked ", { status: 451 });
}
return new Response(`Greetings`);
}
<पी> तो हमें किनारे के झंडों की आवश्यकता क्यों है? एज फ़्लैग हमें कोड को अपडेट किए बिना नियमों को प्रबंधित करने में सक्षम बनाएंगे। <पी> चलिए शुरू करते हैं.. चरण 1:रेडिस और एज फ़्लैग्स सेटअप
<पी> अपस्टैश कंसोल पर एक रेडिस डेटाबेस बनाएं। सर्वोत्तम प्रदर्शन के लिए, वैश्विक और उन क्षेत्रों का चयन करें जहां उपयोगकर्ताओं की संभावना है। <पी>
<पी> एज फ़्लैग्स पेज पर जाएँ और आपके द्वारा अभी बनाया गया डेटाबेस चुनें। blockTraffic नाम से एक नया ध्वज बनाएं . फिर अवरुद्ध देशों के लिए एक नियम जोड़ें:Country is in array United States -> on पी> <पी> ध्वज को सहेजें और सक्षम करें। <पी>
<पी> यदि अनुरोध संयुक्त राज्य अमेरिका से आ रहा है तो उपरोक्त ध्वज सक्षम किया जाएगा। चरण 2:Next.js प्रोजेक्ट सेटअप
<पी> एक Next.js एप्लिकेशन बनाएं। npx create-next-app@latest --typescript
<पी> @upstash पैकेज स्थापित करें: $ npm install @upstash/edge-flags @upstash/redis
<पी> मिडिलवेयर.ts बनाएं (अपने प्रोजेक्ट फ़ोल्डर में शीर्ष स्तर): /middleware.tsimport { NextRequest, NextResponse } from "next/server";
import { Client as EdgeFlags } from "@upstash/edge-flags";
import { Redis } from "@upstash/redis";
const edgeFlags = new EdgeFlags({ redis: Redis.fromEnv() });
export default async function middleware(
req: NextRequest,
): Promise<NextResponse> {
const enabled = await edgeFlags.getFlag("blockTraffic", req.geo ?? {});
if (!enabled) {
const url = new URL(req.url);
url.pathname = "/blocked";
return NextResponse.rewrite(url);
}
return NextResponse.next();
}
export const config = {
matcher: "/",
};
<पी> आइए ब्लॉक किए गए के लिए एक पेज बनाएं: पेज/ब्लॉक.tsximport styles from "@/styles/Home.module.css";
export default function Blocked() {
return (
<div>
<main className={styles.main}>
<h3>Access blocked.</h3>
</main>
</div>
);
}
<पी> बस इतना ही! अब आप ऐप को वर्सेल:vercel deploy पर तैनात कर सकते हैं पी> <पी> वर्सेल में पर्यावरण चर को अपस्टैश कंसोल से कॉपी करके या अपस्टैश एकीकरण का उपयोग करके जोड़ना सुनिश्चित करें। <पी>
<पी> पृष्ठ पर जाएँ, यदि आप अमेरिका में हैं तो आपको अवरुद्ध पृष्ठ पर पुनः निर्देशित किया जाएगा। वीपीएन का उपयोग करके विभिन्न देशों का परीक्षण करें। विकास में जियोलोकेशन
<पी> जियोलोकेशन डेटा स्थानीय रूप से उपलब्ध नहीं है। ऐप का परीक्षण करने के लिए आपको इसे वर्सेल में तैनात करना होगा। लिंक
<पी> एज फ़्लैग दस्तावेज़ <पी> वर्सेल एज मिडलवेयर