ในโพสต์นี้ เราจะแสดงวิธีบล็อกการรับส่งข้อมูลไปยังเว็บแอปของคุณจากประเทศหนึ่งๆ คุณสามารถใช้ตรรกะเดียวกันเพื่อจัดการการรับส่งข้อมูลด้วยตัวกรองอื่นๆ (ที่อยู่ 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 เพื่อประสิทธิภาพที่ดีที่สุด ให้เลือกทั่วโลกและภูมิภาคที่ผู้ใช้น่าจะอยู่

ไปที่หน้า Edge flags และเลือกฐานข้อมูลที่คุณเพิ่งสร้างขึ้น สร้างแฟล็กใหม่ด้วยชื่อ
บันทึกและเปิดใช้งานแฟล็ก
ธงด้านบนจะเปิดใช้งานหากคำขอมาจากสหรัฐอเมริกา
สร้างแอปพลิเคชัน Next.js
ติดตั้งแพ็คเกจ @upstash:
สร้าง middleware.ts (ระดับบนสุดในโฟลเดอร์โครงการของคุณ):
มาสร้างเพจสำหรับผู้ถูกบล็อกกันเถอะ:
นั่นคือทั้งหมด! ตอนนี้คุณสามารถปรับใช้แอปกับ Vercel:
ตรวจสอบให้แน่ใจว่าได้เพิ่มตัวแปรสภาพแวดล้อมให้กับ Vercel โดยการคัดลอกจากคอนโซล Upstash หรือโดยใช้การรวม Upstash
ไปที่หน้านั้น คุณควรถูกเปลี่ยนเส้นทางไปยังหน้าที่ถูกบล็อก หากคุณอยู่ในสหรัฐอเมริกา ทดสอบประเทศต่างๆ โดยใช้ VPN
ข้อมูลตำแหน่งทางภูมิศาสตร์ไม่สามารถใช้งานได้ในเครื่อง คุณต้องปรับใช้กับ Vercel เพื่อทดสอบแอป
เอกสารประกอบการตั้งค่าสถานะ Edge
มิดเดิลแวร์ Vercel Edge09 . จากนั้นเพิ่มกฎสำหรับประเทศที่ถูกบล็อก:11 28รหัส> 38รหัส> -> 45รหัส> ป> 
ขั้นตอนที่ 2:การตั้งค่าโครงการ Next.js
npx create-next-app@latest --typescript$ npm install @upstash/edge-flags @upstash/redisimport { 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: "/",
};import styles from "@/styles/Home.module.css";
export default function Blocked() {
return (
<div>
<main className={styles.main}>
<h3>Access blocked.</h3>
</main>
</div>
);
}53 ป> 
ตำแหน่งทางภูมิศาสตร์ในการพัฒนา
ลิงก์