สภาพแวดล้อมของฉันมีคำขอของผู้ใช้ที่ส่งผ่านระบบจำนวนมาก:
[ลูกค้า] -> [ELB] ---> [nginx] -> [เว็บ]
(ELB = AWS ตัวโหลดบาลานซ์แบบยืดหยุ่น)
ขอบคุณคำตอบนี้ฉันมี nginx ที่กำหนดและส่งต่อที่อยู่ IP ของไคลเอ็นต์ที่ถูกต้องไปยังเซิร์ฟเวอร์ upstream (เว็บ) ด้วยX-Forwarded-For
และX-Real_IP
ส่วนหัว การกำหนดค่า nginx ที่เกี่ยวข้อง:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
proxy_set_header X-Real-IP $remote_addr;
ปัญหาของฉันคือสิ่งนี้โมดูล Real IP ใน nginx จะแทนที่$remote_addr
ตัวแปรที่มีอยู่ด้วยผลลัพธ์ของการX-Forwarded-For
คำนวณ สิ่งนี้ทำให้ IP ไคลเอนต์ต้นทางของฉัน แต่ฉันสูญเสียที่อยู่ IP ของระบบที่ส่งคำขอไปยังพรอกซี (เช่น ELB)
โดยรวมแล้วการมี IP ของลูกค้าสำคัญกว่าสำหรับฉัน แต่ฉันต้องการบันทึกการร้องขอทั้งหมดเพื่อให้ฉันสามารถเข้าใจ (และดีบัก) ปริมาณการใช้ข้อมูลที่ไหล ขณะนี้ฉันสามารถมีได้เฉพาะ nginx บันทึก IP ไคลเอ็นต์ IP ของตนเองและ IP เซิร์ฟเวอร์ upstream ฉันต้องการบันทึก ELB IP ด้วยเช่นกัน
ฉันเห็นX-Istenceถามคำถามเดียวกันในปี 2013 ด้วยโชคเล็กน้อย ตั้งแต่นั้นมามีการเปลี่ยนแปลงหรือปรับปรุงอะไรบ้าง?
$realip_remote_addr
ผมก็กลับมาที่จะตอบคำถามของฉันเองเพราะหลังจากที่ใฝ่หากลยุทธ์อื่นในที่สุดผมก็สะดุด มันใช้งานได้อย่างสวยงาม เป็นจริงพยายามที่จะได้รับ proxy_protocol ทำงานและมาเมื่อ nginx แก้ไขบันทึกสำหรับ 1.9.7