คำตอบ:
ใช่สตริงคำจำกัดความการกำหนดค่า จำกัด อัตราทั่วไปดูเหมือนว่า:
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
ส่วนหัว