Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

Vercel Edge और Upstash Edge Flags के साथ Next.js ऐप्स के लिए निर्बाध देश-आधारित ट्रैफिक नियंत्रण

इस पोस्ट में, हम दिखाएंगे कि अपने वेब ऐप पर किसी देश से ट्रैफिक को कैसे ब्लॉक करें। आप अन्य फ़िल्टर (IP एड्रेस, यूजर-एजेंट आदि) के साथ ट्रैफिक प्रबंधित करने के लिए उसी तर्क को लागू कर सकते हैं। हम एक डिकॉपल्ड, लाइटवेट और डायनामिक समाधान का लक्ष्य रखते हैं:

  • मुझे देश को अपडेट करने के लिए कोड को अपडेट और डेप्लॉय नहीं करना चाहिए।
  • इसका मेरे एप्लिकेशन पर न्यूनतम ओवरहेड और लागत होनी चाहिए।

हम Vercel Edge Middleware और Upstash Edge Flags का उपयोग करेंगे।

Vercel Edge Middleware

Vercel Edge मिडलवेयर एक कोड है जो बैकएंड द्वारा प्रोसेस किए जाने से पहले वेब अनुरोधों को इंटरसेप्ट करता है। हम इसका उपयोग देश और यूजर एजेंट की जांच के लिए करेंगे क्योंकि:

  • यह तेज़ और सस्ता है।
  • आपके एप्लिकेशन से डिकॉपल्ड है।

Upstash Edge Flags

वास्तव में आप एज मिडलवेयर कोड में एक साधारण 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: Redis और एज फ्लैग सेटअप

Upstash Console पर एक Redis डेटाबेस बनाएं। सर्वोत्तम प्रदर्शन के लिए, ग्लोबल और उन क्षेत्रों का चयन करें जहां यूजर्स के होने की संभावना है।

Vercel Edge और Upstash Edge Flags के साथ Next.js ऐप्स के लिए निर्बाध देश-आधारित ट्रैफिक नियंत्रण

Edge flags पेज पर जाएं और आपके द्वारा अभी बनाए गए डेटाबेस का चयन करें। blockTraffic नाम से एक नया फ्लैग बनाएं। फिर ब्लॉक किए गए देशों के लिए एक नियम जोड़ें: Country is in array United States -> on

सेव करें और फ्लैग को सक्षम करें।

Vercel Edge और Upstash Edge Flags के साथ Next.js ऐप्स के लिए निर्बाध देश-आधारित ट्रैफिक नियंत्रण

उपरोक्त फ्लैग सक्षम हो जाएगा यदि अनुरोध संयुक्त राज्य अमेरिका से आ रहा है।

चरण 2: Next.js प्रोजेक्ट सेटअप

एक Next.js एप्लिकेशन बनाएं।

npx create-next-app@latest --typescript

@upstash पैकेज इंस्टॉल करें:

$ npm install @upstash/edge-flags @upstash/redis

मिडलवेयर.ts बनाएं (आपके प्रोजेक्ट फोल्डर में शीर्ष स्तर पर):

/middleware.ts
import { 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: "/", };

ब्लॉक किए गए के लिए एक पेज बनाएं:

pages/blocked.tsx
import styles from "@/styles/Home.module.css";
export default function Blocked() {
  return (
    <div>
      <main className={styles.main}>
        <h3>Access blocked.</h3>
      </main>
    </div>
  );
}

बस इतना ही! अब ऐप को Vercel पर डेप्लॉय करें: vercel deploy

सुनिश्चित करें कि एनवायरनमेंट वेरिएबल को Vercel में या तो Upstash कंसोल से कॉपी करके या Upstash इंटीग्रेशन का उपयोग करके जोड़ा गया है।

Vercel Edge और Upstash Edge Flags के साथ Next.js ऐप्स के लिए निर्बाध देश-आधारित ट्रैफिक नियंत्रण

पेज पर जाएं, यदि आप US में हैं तो आपको ब्लॉक पेज पर रीडायरेक्ट किया जाना चाहिए। VPN का उपयोग करके विभिन्न देशों का परीक्षण करें।

विकास में जियोलोकेशन

जियोलोकेशन डेटा स्थानीय रूप से उपलब्ध नहीं है। ऐप का परीक्षण करने के लिए आपको Vercel पर डेप्लॉय करना होगा।

लिंक

Edge flags डॉक्यूमेंटेशन

Vercel Edge मिडलवेयर

  1. CSS के साथ फ्लोटिंग एलिमेंट्स CSS के साथ फ्लोटिंग एलिमेंट्स

    CSS float प्रॉपर्टी का उपयोग किसी बॉक्स या कंटेंट को पोजिशन या फॉर्मेट करने के लिए किया जाता है। डेवलपर CSS float का उपयोग करके एलिमेंट को बाएं या दाएं पोजिशन कर सकते हैं।Float प्रॉपर्टी के मानfloat प्रॉपर्टी के निम्नलिखित मान हो सकते हैं:left - एलिमेंट अपने कंटेनर के बाएं फ्लोट करता हैright - एलिमे

  1. पायथन प्रोग्राम: सिलेंडर का परिमाप ढूंढें पायथन प्रोग्राम: सिलेंडर का परिमाप ढूंढें

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट व्यास और ऊंचाई इनपुट करें, सिलेंडर का परिमाप ढूंढें। परिमाप सिलेंडर का साइड व्यू है यानी एक आयत। इसलिए परिमाप = 2 * (h + d) यहां d सिलेंडर का व्यास है h सिलेंडर की ऊंचाई है आइए कार्यान्वयन देखें: उदा

  1. रूबी एक्सेप्शन में TracePoint के साथ महारत हासिल करें: जटिल एरर परिदृश्यों का निदान करें रूबी एक्सेप्शन में TracePoint के साथ महारत हासिल करें: जटिल एरर परिदृश्यों का निदान करें

    कभी-कभी यह समझना वास्तव में मुश्किल हो सकता है कि एक्सेप्शन के साथ क्या हो रहा है - विशेष रूप से बड़े ऐप्स में। कल्पना करें कि आप किसी मौजूदा प्रोजेक्ट के अंदर कुछ कोड पर काम कर रहे हैं। आप एक एक्सेप्शन उठाते हैं, फिर कुछ अजीब होता है। शायद एक्सेप्शन निगल लिया जाता है। शायद एक एनवायरनमेंट वेरिएबल बद