Real-IP का उपयोग करते समय $ Remote_addr का मूल मान कैसे लॉग करें


9

मेरे वातावरण में कई प्रणालियों से गुजरने वाले उपयोगकर्ता अनुरोध हैं:

[ग्राहक] -> [ELB] ---> [nginx] -> [वेब]

(ELB = AWS इलास्टिक लोड बैलेंसर)

इस उत्तर के लिए धन्यवाद , मेरे पास 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;

मेरी समस्या यह है, nginx में रियल आईपी मॉड्यूल अपने परिवर्तन के परिणाम के साथ मौजूदा चर को बदलता है । यह मुझे मूल क्लाइंट आईपी देता है, लेकिन मैं उस सिस्टम का आईपी पता खो रहा हूं जो वास्तव में प्रॉक्सी (यानी ईएलबी) को अनुरोध भेज रहा है।$remote_addrX-Forwarded-For

कुल मिलाकर, क्लाइंट आईपी होना मेरे लिए अधिक महत्वपूर्ण है, लेकिन मैं अनुरोधों की पूरी श्रृंखला को लॉग इन करने में सक्षम होना चाहूंगा ताकि मैं समझ सकूं (और डिबग) कि ट्रैफिक कैसे बह रहा है। वर्तमान में, मैं केवल क्लाइंट IP, अपना स्वयं का IP और अपस्ट्रीम सर्वर IP लॉग कर सकता है। मैं ELB IP को भी लॉग इन करने में सक्षम होना चाहूंगा।

मैं देख रहा हूं कि X-Istence ने 2013 में एक ही सवाल पूछा था , कम भाग्य के साथ। तब से कुछ भी बदला या सुधरा है?

जवाबों:


8

आप चर$realip_remote_addr में जोड़ने वाले ELB का मूल ग्राहक पता प्राप्त कर सकते हैं , लेकिन ध्यान रहे कि यह चर केवल nginx 1.9.7 में जोड़ा गया था, इसलिए आपको nginx का बहुत हालिया संस्करण चलाने की आवश्यकता होगी।


धन्यवाद @ मिचेल हैम्पटन Hampton! मैं अपने सवाल का जवाब देने के लिए वापस आ रहा था क्योंकि एक वैकल्पिक रणनीति का पीछा करने के बाद, मैं आखिरकार लड़खड़ा गया $realip_remote_addr। यह खूबसूरती से काम करता है। वास्तव में काम करने के लिए proxy_protocol प्राप्त करने की कोशिश और के लिए 1.9.7 nginx पैच नोटों पर आया था
michaelg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.