จำกัด Request Rate ด้วย NGINX สำหรับ API
rate limiting ช่วยจำกัดความถี่คำขอตาม key เช่น IP อธิบายหลักการใช้งาน กรณีที่เหมาะ และข้อควรระวังจากเอกสารทางการ
rate limiting ช่วยจำกัดความถี่คำขอตาม key เช่น IP เหมาะกับ endpoint login หรือ API ที่ถูกเรียกถี่เกินปกติ บทความนี้สรุปแนวคิดจากเอกสารทางการของ NGINX และจุดที่ควรตรวจเมื่อนำไปใช้จริง
ภาพรวม
NGINX รับและจัดเส้นทาง HTTP ก่อนถึงแอป การตั้ง location, upstream, header, timeout และ log มีผลต่อความถูกต้อง ความเร็ว และความปลอดภัยของบริการ
หัวข้อนี้ตอบโจทย์เฉพาะเรื่อง: rate limiting ช่วยจำกัดความถี่คำขอตาม key เช่น IP จึงควรเริ่มจากปัญหาที่ต้องแก้และผลลัพธ์ที่คาดหวัง ไม่ใช่เพียงเปิดฟีเจอร์เพราะมีอยู่ในเครื่องมือ
หลักการทำงาน
NGINX ใช้ shared zone ติดตามอัตราและตอบกลับหรือหน่วงคำขอเมื่อเกินเกณฑ์
ให้ตรวจทั้งสถานะที่เครื่องมือรายงานและผลลัพธ์ปลายทางที่ผู้ใช้หรือระบบอื่นได้รับ หากสองส่วนไม่ตรงกัน ควรกลับไปตรวจค่าตั้งต้นและขอบเขตที่ฟีเจอร์นี้รับผิดชอบก่อนเปลี่ยนค่าเพิ่มเติม
เหมาะกับงานแบบไหน
เหมาะกับ endpoint login หรือ API ที่ถูกเรียกถี่เกินปกติ
ก่อนทดลอง ให้ระบุสิ่งที่จะใช้วัดผล เช่น เวลาตอบสนอง ความพร้อมใช้งาน ความถูกต้องของข้อมูล หรือภาระการดูแล แล้วเทียบกับสภาพเดิม วิธีนี้ช่วยให้รู้ว่าฟีเจอร์แก้ปัญหาจริงหรือย้ายภาระไปอีกจุดหนึ่ง
ขั้นตอนนำไปใช้
- ตรวจไฟล์ตั้งค่าด้วย nginx -t ก่อน reload
- ทดสอบ URL และ header ทั้งเส้นทางที่ถูกและควรถูกปฏิเสธ
- ดู access log, error log และเวลา upstream หลังเปลี่ยนค่า
เริ่มจากขอบเขตเล็กและเก็บผลทดสอบไว้กับการเปลี่ยนแปลง หากจะใช้ใน production ให้กำหนดผู้ติดตามผลและเงื่อนไขที่จะหยุดการขยายการใช้งาน
ข้อควรระวัง
IP หลัง proxy อาจไม่ใช่ผู้ใช้จริง ต้องตั้ง trusted proxy และเลือก key ให้ถูก
แปลงข้อควรระวังนี้เป็นรายการตรวจในการทบทวนงาน เพราะปัญหาจากค่าตั้งต้นอาจไม่แสดงทันทีในสภาพแวดล้อมทดสอบ
สรุป
rate limiting ช่วยจำกัดความถี่คำขอตาม key เช่น IP เหมาะกับ endpoint login หรือ API ที่ถูกเรียกถี่เกินปกติ ก่อนนำไปใช้กับงานหลัก ควรตรวจผลตามขั้นตอนข้างต้นและทบทวนข้อจำกัดของระบบที่มีอยู่
อ่านเพิ่มเติม: เอกสารทางการของ NGINX