Log::info("event.login.header", request()->header());
獲取不到客戶真實(shí) IP ,使用 $ip = request()->getRealIp();
{
"x-forwarded-for": "240e:445:5c04:8547:7900:6efe:e86d:4312, 172.70.91.232",
"x-real-ip": "172.70.91.232",
"connection": "close",
"content-length": "102",
"accept-encoding": "gzip, br",
"cf-ray": "8a10d0aabd00368f-LHR",
"x-forwarded-proto": "https",
"cf-visitor": "{\"scheme\":\"https\"}",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
"accept-language": "zh_CN",
"authori-zation": "null",
"sec-ch-ua-mobile": "?0",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"content-type": "application/json;charset=UTF-8",
"accept": "application/json, text/plain, */*",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-site": "same-origin",
"sec-fetch-mode": "cors",
"sec-fetch-dest": "empty",
"priority": "u=1, i",
"cookie": "PHPSID=b96eec4da09bd941cb5c59482b095a5e",
"cf-connecting-ip": "240e:445:5c04:8547:7900:6efe:e86d:4312",
"cdn-loop": "cloudflare",
"cf-ipcountry": "CN"
}
request()->getRealIp() 原理是從tcp層面先獲取客戶端ip,如果客戶端ip是內(nèi)網(wǎng)ip則證明是負(fù)載均衡轉(zhuǎn)發(fā),則嘗試讀取http頭中的x-real-ip等字段作為真實(shí)ip。
如果里使用了cdn,那么獲取的從TCP層面客戶端ip為cdn服務(wù)器的外網(wǎng)ip,因?yàn)樗皇莾?nèi)網(wǎng)ip,所以會(huì)直接被認(rèn)為是真實(shí)的客戶端ip。webman無法判斷你是否用了cdn,所以不能從http頭中獲取真實(shí)ip,因?yàn)樗赡苁莻卧斓摹?/p>
如果你用了cdn,并且信任http頭中的 x-real-ip 字段,你應(yīng)該使用$request->header('x-real-ip'); 來獲取客戶端ip