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