2011-05-26 12 views
7

मेरे सर्वर में कोई सार्वजनिक आईपी पता नहीं है, इसलिए मुझे नहीं पता कि असली ग्राहक का आईपी पता कैसे प्राप्त करें।रेल और Nginx के साथ ग्राहक का वास्तविक आईपी पता प्राप्त करें?

location/{ 
    proxy_pass http://domain1; 
    proxy_set_header  Host   $host; 
    proxy_set_header  X-Real-IP  $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

मेरी रेल एप्लिकेशन के नियंत्रक दोनों request.ip में और request.remote_ip अपने सर्वर के गेटवे पता वापसी:

यह मेरा nginx के विन्यास है।

मुझे क्लाइंट का असली आईपी कैसे मिल सकता है?

एक्स-फॉरवर्डेड कैसे प्राप्त करें- रेल अनुरोध से मूल्य के लिए?

उत्तर

6

आप हैडर मूल्य एक्स-अग्रेषित-के लिए चाहिए पाने

http://en.wikipedia.org/wiki/X-Forwarded-For

+0

यह ग्राहक की "असली" आईपी अगर वह प्रॉक्सी के पीछे बैठी है नहीं हो सकता है :) और आप जानते हैं :) –

+0

@Rizwan एस हरिफ़ तो हम बस प्रॉक्सी ग्राहक मानते हैं। ^^ –

+1

लेकिन मेरे रेल के लॉग में आईपी गेट_वे पता भी है। – ethan

18

रेल हमारे लिए स्वचालित रूप से यह कर जाने का अनुमान था, लेकिन यह वर्तमान 3.x के साथ टूट किया जा रहा है

मैं इस का उपयोग कर रहा:

def ip() request.env['HTTP_X_FORWARDED_FOR'] || request.remote_ip end 
+0

मैं स्थानीयहोस्ट से अनुरोध कैसे प्राप्त करूं? Nginx से पहले मुझे 127.0.0.1 प्राप्त होता था, लेकिन अब मुझे इसके बजाय निजी आईपी पता मिलता है ... – Adrian

+0

एक अनुस्मारक है कि हेडर जरूरी नहीं है कि आईपी एक विशेष रूप से अल्पविराम से अलग आईपी की एक सूची है, बाएं सबसे मूल मूल है ग्राहक। यदि केवल एक आईपी है, तो उपर्युक्त कोड काम करेगा, लेकिन मुझे संदेह नहीं है कि एक से अधिक थे या नहीं। Http://en.wikipedia.org/wiki/X- अग्रेषित- देखें। –

संबंधित मुद्दे