सवाल रीयल-आईपी का उपयोग करते समय $ remote_addr के मूल मान को कैसे लॉग करें


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

[ग्राहक] -> [ईएलबी] ---> [nginx] -> [वेब]

(ईएलबी = एडब्ल्यूएस लोचदार लोड बैलेंसर)

इस को धन्यवाद उत्तर, मेरे पास अपस्ट्रीम सर्वर (वेब) के साथ सही क्लाइंट आईपी पता निर्धारित करने और पास करने के लिए nginx है 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_addr इसके परिणाम के साथ चर X-Forwarded-For गणना। यह मुझे मूल क्लाइंट आईपी देता है, लेकिन मैं उस प्रणाली का आईपी पता खो रहा हूं जो वास्तव में प्रॉक्सी (यानी ईएलबी) को अनुरोध भेजता है।

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

समझा एक्स-Istence उससे पूछा सवाल 2013 में, छोटी किस्मत के साथ। तब से कुछ बदल गया है या सुधार हुआ है?


8
2017-12-19 05:24


मूल




जवाब:


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


8
2017-12-19 05:28



धन्यवाद @ माइकल हैम्पटन! मैं अपने स्वयं के प्रश्न का उत्तर देने के लिए वापस आ रहा था क्योंकि वैकल्पिक रणनीति का पीछा करने के बाद, मैं अंत में ठोकर खाई $realip_remote_addr। यह खूबसूरती से काम करता है। वास्तव में काम करने के लिए proxy_protocol पाने की कोशिश कर रहा था और 1.9.7 के लिए nginx पैच नोट्स पर आया था - michaelg