Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

การควบคุมการรับส่งข้อมูลตามประเทศที่ราบรื่นสำหรับแอป Next.js พร้อม Vercel Edge และ Upstash Edge Flags

ในโพสต์นี้ เราจะแสดงวิธีบล็อกการรับส่งข้อมูลไปยังเว็บแอปของคุณจากประเทศหนึ่งๆ คุณสามารถใช้ตรรกะเดียวกันเพื่อจัดการการรับส่งข้อมูลด้วยตัวกรองอื่นๆ (ที่อยู่ IP, user-agent ฯลฯ) เรามุ่งเป้าไปที่โซลูชันแบบแยกส่วน น้ำหนักเบา และไดนามิก:

  • ฉันไม่ควรจำเป็นต้องอัปเดตและปรับใช้โค้ดเพื่ออัปเดตประเทศ
  • ควรมีค่าใช้จ่ายและค่าใช้จ่ายขั้นต่ำในการสมัครของฉัน

เราจะใช้ Vercel Edge Middleware และ Upstash Edge Flags

มิดเดิลแวร์ Vercel Edge

มิดเดิลแวร์ Vercel Edge คือโค้ดที่ดักฟังคำขอของเว็บก่อนที่จะประมวลผลโดยแบ็กเอนด์ เราจะใช้มันเพื่อตรวจสอบประเทศและตัวแทนผู้ใช้เนื่องจาก:

  • รวดเร็วและราคาถูก
  • แยกออกจากแอปพลิเคชันของคุณ

ธง Upstash Edge

แน่นอน คุณสามารถตรวจสอบประเทศและบล็อกการรับส่งข้อมูลด้วยคำสั่ง if ง่ายๆ ในโค้ดมิดเดิลแวร์ Edge ของคุณดังนี้:

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`);
}

เหตุใดเราจึงต้องมีธงขอบ? ธง Edge จะช่วยให้เราสามารถจัดการกฎโดยไม่ต้องอัปเดตโค้ด

เริ่มกันเลย..

ขั้นตอนที่ 1:การตั้งค่า Redis และ Edge Flags

สร้างฐานข้อมูล Redis บน Upstash Console เพื่อประสิทธิภาพที่ดีที่สุด ให้เลือกทั่วโลกและภูมิภาคที่ผู้ใช้น่าจะอยู่

การควบคุมการรับส่งข้อมูลตามประเทศที่ราบรื่นสำหรับแอป Next.js พร้อม Vercel Edge และ Upstash Edge Flags

ไปที่หน้า Edge flags และเลือกฐานข้อมูลที่คุณเพิ่งสร้างขึ้น สร้างแฟล็กใหม่ด้วยชื่อ 09 . จากนั้นเพิ่มกฎสำหรับประเทศที่ถูกบล็อก:11 28 38 -> 45

บันทึกและเปิดใช้งานแฟล็ก

การควบคุมการรับส่งข้อมูลตามประเทศที่ราบรื่นสำหรับแอป Next.js พร้อม Vercel Edge และ Upstash Edge Flags

ธงด้านบนจะเปิดใช้งานหากคำขอมาจากสหรัฐอเมริกา

ขั้นตอนที่ 2:การตั้งค่าโครงการ Next.js

สร้างแอปพลิเคชัน Next.js

npx create-next-app@latest --typescript

ติดตั้งแพ็คเกจ @upstash:

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

สร้าง middleware.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: "/",
};

มาสร้างเพจสำหรับผู้ถูกบล็อกกันเถอะ:

หน้า/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:53

ตรวจสอบให้แน่ใจว่าได้เพิ่มตัวแปรสภาพแวดล้อมให้กับ Vercel โดยการคัดลอกจากคอนโซล Upstash หรือโดยใช้การรวม Upstash

การควบคุมการรับส่งข้อมูลตามประเทศที่ราบรื่นสำหรับแอป Next.js พร้อม Vercel Edge และ Upstash Edge Flags

ไปที่หน้านั้น คุณควรถูกเปลี่ยนเส้นทางไปยังหน้าที่ถูกบล็อก หากคุณอยู่ในสหรัฐอเมริกา ทดสอบประเทศต่างๆ โดยใช้ VPN

ตำแหน่งทางภูมิศาสตร์ในการพัฒนา

ข้อมูลตำแหน่งทางภูมิศาสตร์ไม่สามารถใช้งานได้ในเครื่อง คุณต้องปรับใช้กับ Vercel เพื่อทดสอบแอป

ลิงก์

เอกสารประกอบการตั้งค่าสถานะ Edge

มิดเดิลแวร์ Vercel Edge