के पीछे एक पिरामिड सर्वर में क्लाइंट का वास्तविक आईपी कैसे प्राप्त करें मेरे पास एक पिरामिड एप्लिकेशन है जो कुछ स्थानों पर request.environ['REMOTE_ADDR']
का उपयोग करता है।किसी nginx प्रॉक्सी
आवेदन पोर्ट 6543 पर पायथन पेस्ट द्वारा परोसा जाता है और पोर्ट 80 पर एक nginx सर्वर सुनना पेस्ट सर्वर को अनुरोध अग्रेषित कर रहा है।
nginx विन्यास पिरामिड रसोई की किताब से प्रेरित है:
server {
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
location/{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:6543;
}
पिरामिड आवेदन में चर request.environ [ 'REMOTE_ADDR'] अब हमेशा 127.0.0.1 के बराबर है। मैं इस समस्या को हल करने के लिए कुछ रणनीतियों को देखता हूं लेकिन मुझे नहीं पता कि ऐसा करने के लिए एक अनुशंसित तरीका है या नहीं।
if 'HTTP_X_REAL_IP' in event.request.environ: event.request.environ['REMOTE_ADDR'] = event.request.environ['HTTP_X_REAL_IP']
एक WSGI मिडलवेयर का उपयोग करें:
एक NewRequest ग्राहक जो request.environ की जगह [ 'REMOTE_ADDR'] यदि आवश्यक जोड़ें:
यहाँ मैं क्या कर रहा हूँ पर विचार है पिरामिड परत को मारने से पहले request.en वातावरण को संशोधित करने के लिए।
कुछ और
कौन सा रणनीति आप पिरामिड अनुप्रयोगों को विस्तृत करने के लिए प्रयोग करते हैं? यदि मेरे पास दो nginx प्रॉक्सी है तो क्या होगा? (पहली बार लैन की सेवा करता है और दूसरा एक मशीन सीधे इंटरनेट से जुड़ा हुआ है)।
मुझे कुछ याद करना होगा क्योंकि मैंने पहली बार पकवान पुस्तिका में सुझाए गए प्रीफिक्स मिडलवेयर के साथ प्रयास किया था लेकिन यह काम नहीं करता था। मुझे मोटे तौर पर इसे फिर से प्रयास करने की ज़रूरत है। – ascobol
ठीक है यह पता चला है कि मैं [पाइपलाइन: मुख्य] अनुभाग डालने के लिए भूल गया। सब कुछ ठीक काम करता है – ascobol