var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket ? req.connection.socket.remoteAddress : null);
หมายเหตุว่าบางครั้งคุณจะได้รับมากกว่าหนึ่งที่อยู่ IP req.headers['x-forwarded-for']
ใน นอกจากนี้x-forwarded-for
ส่วนหัวจะไม่ถูกตั้งค่าเสมอซึ่งอาจทำให้เกิดข้อผิดพลาด
รูปแบบทั่วไปของฟิลด์คือ:
X-ส่งสำหรับ: client, proxy1, proxy2, proxy3
โดยที่ค่านั้นเป็นรายการที่อยู่ IP ที่คั่นด้วยเครื่องหมายจุลภาค + เว้นวรรคซ้ายสุดเป็นไคลเอ็นต์ดั้งเดิมและแต่ละพร็อกซีที่ต่อเนื่องที่ผ่านการร้องขอเพิ่มที่อยู่ IP ที่ได้รับการร้องขอ ในตัวอย่างนี้ขอผ่านproxy1
, และจากนั้นproxy2
ปรากฏเป็นที่อยู่ระยะไกลของคำขอproxy3
proxy3
นี่คือวิธีการแก้ปัญหาที่แนะนำโดยArnav Guptaพร้อมกับการแก้ไขMartinได้แนะนำด้านล่างในความคิดเห็นสำหรับกรณีที่x-forwarded-for
ไม่ได้ตั้งค่า:
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress
req.ip
source - expressjs.com/en/api.html#req.ip