यदि आप एक लोड बैलेंसर के अधीन हैं, तो लारवेल \Request::ip()
हमेशा बैलेंसर का आईपी लौटाता है:
echo $request->ip();
// server ip
echo \Request::ip();
// server ip
echo \request()->ip();
// server ip
echo $this->getIp(); //see the method below
// clent ip
यह कस्टम विधि असली क्लाइंट आईपी लौटाती है:
public function getIp(){
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
if (array_key_exists($key, $_SERVER) === true){
foreach (explode(',', $_SERVER[$key]) as $ip){
$ip = trim($ip); // just to be safe
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
return $ip;
}
}
}
}
}
इसके अतिरिक्त, मेरा सुझाव है कि आप लारवेल के थ्रोटल मिडलवेयर का उपयोग करते हुए बहुत सावधान रहें : इसमें लारवेल का उपयोग किया गया है Request::ip()
, इसलिए आपके सभी आगंतुकों को एक ही उपयोगकर्ता के रूप में पहचाना जाएगा और आप थ्रॉटल सीमा को बहुत तेज़ी से मारेंगे। मैंने इस लाइव का अनुभव किया और इससे बड़े मुद्दे पैदा हुए।
इसे ठीक करने के लिए:
रोशन \ http \ Request.php
public function ip()
{
//return $this->getClientIp(); //original method
return $this->getIp(); // the above method
}
अब आप भी उपयोग कर सकते हैं Request::ip()
, जो उत्पादन में वास्तविक आईपी वापस करना चाहिए।