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

ใช้รายการอนุญาต/ปฏิเสธ IP ที่ Edge กับ Cloudflare Workers และ Upstash Redis

เป็นเรื่องปกติที่จะต้องจำกัดการเข้าถึงเว็บไซต์ของคุณสำหรับ IP เฉพาะบางรายการ ในโพสต์นี้ ผมจะแสดงวิธีการใช้รายการอนุญาต/ปฏิเสธ IP โดยใช้การคำนวณแบบ Edge ให้ฉันแนะนำ Cloudflare Workers ก่อน

พนักงาน Cloudflare

พนักงาน Cloudflare เป็นเทคโนโลยีที่ได้รับความนิยมอย่างมากในช่วงไม่กี่ปีที่ผ่านมา เผยแพร่สู่สาธารณะในปี 2560 และพื้นที่จัดเก็บข้อมูล Cloudflare KV เปิดให้ใช้งานแบบสาธารณะในปี 2019

ฉันจะอธิบายโดยย่อของผู้ปฏิบัติงาน Cloudflare หรือที่เก็บข้อมูล KV โดยไม่ต้องพูดถึงรายละเอียดที่ลึกซึ้งมากนัก ด้วยพนักงาน Cloudflare คุณสามารถสกัดกั้นระดับขอบคำขอ http ใดๆ ก็ได้ คุณสามารถดำเนินการข้อมูลโค้ดของคุณและจัดการคำขอ/การตอบสนองได้ นอกจากนี้ คุณยังสามารถใช้ที่เก็บข้อมูล KV ได้ เพื่อสร้างพจนานุกรมที่มีให้ใช้งานใน Cloudflare Workers คุณสามารถลองใช้สภาพแวดล้อมของสนามเด็กเล่นได้อย่างรวดเร็ว ซึ่งค่อนข้างง่ายและสภาพแวดล้อมการทดสอบเพียงคลิกเดียว

นอกเหนือจาก Cloudflare KV Storage ในฐานะนักพัฒนา คุณอาจต้องการโครงสร้างข้อมูลขั้นสูงเพิ่มเติม นอกจากนี้ คุณอาจต้องการเข้าถึงที่เก็บข้อมูล KV จากภายนอก (เช่น จากแบ็กเอนด์หรือไคลเอ็นต์ API หรือ SDK) ดังนั้น เมื่อเร็วๆ นี้เราได้เปิดใช้งาน REST Api Upstash

ตอนนี้คุณสามารถเข้าถึงฐานข้อมูล Upstash Redis โดยใช้:

  • Upstash Rest API ใน Cloudflare Workers
  • redis-cli ในเทอร์มินัลบรรทัดคำสั่งของคุณ
  • ไคลเอ็นต์ redis ใดๆ ในภาษาการเขียนโปรแกรมนั้น

กรุณาคลิก connect . ของคุณ ปุ่มในหน้ารายละเอียดฐานข้อมูลของคุณสำหรับตัวอย่างข้อมูลโค้ดและคำสั่งตัวอย่าง

ใช้รายการอนุญาต/ปฏิเสธ IP ที่ Edge กับ Cloudflare Workers และ Upstash Redis

มาสร้างแอปพลิเคชันขนาดเล็กโดยใช้คนงาน Cloudflare และสำรวจ Upstash Redis Rest API ด้วยกัน

แอปพลิเคชัน

อนุญาต/ปฏิเสธ IP ในตัวงาน Cloudflare โดยใช้ Redis เป็นแหล่งความจริง

ข้อกำหนดเบื้องต้น

  • ฐานข้อมูล Redis แบบไร้เซิร์ฟเวอร์ (คุณสามารถสร้างได้จาก Upstash Console )
  • บัญชี Cloudflare หรือคุณสามารถใช้ CF Playground
  • ความรู้พื้นฐานเกี่ยวกับจาวาสคริปต์
  • ความรู้พื้นฐานของ Cloudflare Workers

:::noteSelect ฐานข้อมูลทั่วโลก ขณะสร้างฐานข้อมูล Upstash ฐานข้อมูลทั่วโลกจำลองข้อมูลไปยังหลายภูมิภาคเพื่อลดเวลาแฝงจากฟังก์ชัน edge:::

มาสร้างคนงาน Cloudflare และสกัดกั้นคำขอกันเถอะ เมื่อคุณสร้างผู้ปฏิบัติงาน มันจะมาพร้อมกับโค้ดตัวอย่างโดยอัตโนมัติ

การนำไปใช้

มารับที่อยู่ IP ของผู้เยี่ยมชมกันเถอะ:

async function handleRequest(request) {
  const ip = request.headers.get("cf-connecting-ip");
  return new Response(ip);
}

สามารถรับที่อยู่ IP ของผู้เยี่ยมชมได้จากส่วนหัว ตอนนี้เราต้องการตรวจสอบว่าที่อยู่ IP นี้อยู่ในรายการที่อนุญาตหรือไม่ มาทำการเรียก REST API เพียงครั้งเดียวและปรับปรุงโค้ดของเรา

async function handleRequest(request) {
  const ip = request.headers.get("cf-connecting-ip");
  res = await fetch(
    "https://YOUR_DATABASE_ENDPOINT/sismember/allowed-set/" +
      ip +
      "?_token=YOUR_REST_API_TOKEN"
  );
  if ((await res.text()).includes("1")) {
    return new Response(ip + " is allowed.");
  }
  return new Response(ip + " is not allowed.");
}

ตอนนี้เราทำการเรียก API ส่วนที่เหลือไปยังเซิร์ฟเวอร์ Upstash Redis และตรวจสอบว่าที่อยู่ IP อยู่ในรายการหรือไม่ หากผลลัพธ์มี "1" แสดงว่าอยู่ในรายการ ไม่เช่นนั้นจะไม่มี

คุณสามารถอัปเดตชุด Redis โดยใช้ redis-cli ด้วยคำสั่งต่อไปนี้:

sadd allowed-set $IP_ADDRESS

บทสรุปและการทำงานในอนาคต

ตอนนี้คุณสามารถเข้าถึงอินสแตนซ์เซิร์ฟเวอร์ Redis ของคุณโดยใช้ rest api ได้แล้ว เรารองรับคำสั่งเกือบทั้งหมดโดยใช้ rest api โปรดดูที่เอกสารประกอบของเราสำหรับรายละเอียดเพิ่มเติม ด้วยพื้นที่จัดเก็บ Cloudflare KV คุณจะถูกผูกไว้กับ KV พจนานุกรม API เท่านั้น และไม่ง่ายในการเข้าถึง Cloudflare Workers KV จากแอปพลิเคชันบุคคลที่สาม แต่ Redis ของ Client SDK และ redis- ที่แตกต่างกันจำนวนมาก คลิ นอกจากนี้ ใน Upstash คุณสามารถเข้าถึงฐานข้อมูล Redis ของคุณโดยใช้ REST API

แอปพลิเคชันง่ายๆ นี้สามารถขยายไปยังเจ้าหน้าที่รักษาความปลอดภัยใน Cloudflare Workers ได้ ผู้ใช้สามารถเปลี่ยนค่าการกำหนดค่าในฐานข้อมูล Redis และ Cloudflare Worker สามารถอ่านการกำหนดค่าจาก Redis ได้