วิธีบันทึกค่าดั้งเดิมของ $ remote_addr เมื่อใช้ Real-IP


9

สภาพแวดล้อมของฉันมีคำขอของผู้ใช้ที่ส่งผ่านระบบจำนวนมาก:

[ลูกค้า] -> [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 ด้วยโชคเล็กน้อย ตั้งแต่นั้นมามีการเปลี่ยนแปลงหรือปรับปรุงอะไรบ้าง?

คำตอบ:


8

คุณสามารถรับที่อยู่ไคลเอนต์ดั้งเดิมของการเชื่อมต่อ ELB ในตัวแปร$realip_remote_addrแต่โปรดทราบว่าตัวแปรนี้ถูกเพิ่มใน nginx 1.9.7 เท่านั้นดังนั้นคุณจะต้องใช้งาน nginx เวอร์ชันล่าสุด


ขอบคุณ @Michael Hampton ♦! $realip_remote_addrผมก็กลับมาที่จะตอบคำถามของฉันเองเพราะหลังจากที่ใฝ่หากลยุทธ์อื่นในที่สุดผมก็สะดุด มันใช้งานได้อย่างสวยงาม เป็นจริงพยายามที่จะได้รับ proxy_protocol ทำงานและมาเมื่อ nginx แก้ไขบันทึกสำหรับ 1.9.7
michaelg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.