คำตอบ:
ใช่สตริงคำจำกัดความการกำหนดค่า จำกัด อัตราทั่วไปดูเหมือนว่า:
limit_req_zone $binary_remote_addr zone=zone:16m rate=1r/s;
ที่$binary_remote_addrเป็นกุญแจสำคัญที่ไม่ซ้ำกันสำหรับการ จำกัด คุณควรลองเปลี่ยนเป็น$http_x_forwarded_forตัวแปรที่รับค่าX-Forwarded-Forส่วนหัว แม้ว่าสิ่งนี้จะเพิ่มปริมาณการใช้หน่วยความจำเพราะ$binary_remote_addrใช้รูปแบบไบนารีที่บีบอัดสำหรับจัดเก็บที่อยู่ IP และ$http_x_forwarded_forไม่ใช่
limit_req_zone $http_x_forwarded_for zone=zone:16m rate=1r/s;
$binary_remote_addrตัวแปรจะได้รับการตั้งค่าอย่างถูกต้อง
limit_req_zoneสั่งกำหนดตัวแปรที่จะใช้เป็นกุญแจสำคัญสำหรับการร้องขอการจัดกลุ่ม
โดยปกติแล้ว$binary_remote_addrจะใช้มากกว่า$remote_addrเพราะมันมีขนาดเล็กและประหยัดพื้นที่
บางทีคุณอาจจะผลัดต้องการใช้RealipModule
สิ่งนี้จะเขียนตัวแปรที่อยู่ระยะไกลไปยังที่อยู่ที่ให้ไว้ในส่วนหัวที่กำหนดเองและจะทำให้การบันทึกและการใช้ตัวแปรอื่น ๆ ง่ายขึ้น
$binary_remote_addrและ$remote_addrถูกกำหนดเป็นค่าของส่วนหัวที่ตั้งค่าไว้โดยทั่วไปX-Forwarded-For- ดังนั้นตัวแปรมาตรฐานของคุณจึงกลายเป็น "ที่อยู่ IP ของลูกค้าจริง" เรียกใช้nginx -Vเพื่อดูว่า NGINX --with-http_realipถูกสร้างขึ้นด้วย จากนั้นตั้งค่าได้ง่ายเหมือน: set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; โดยที่ช่วง CIDR เป็นของตัวโหลดอัพสตรีมของคุณซึ่งตั้งค่าX-Forwarder-Forส่วนหัว