如何獲取用戶真實(shí)IP

在web開(kāi)發(fā)過(guò)程中诲泌,我們經(jīng)常需要獲取用戶客戶端的真實(shí)IP灭返。比如我們想知道客戶的地理位置分布;比如服務(wù)端需要將會(huì)話和IP地址綁定奄侠,以提高安全性等瞬内。但是一般在分布式系統(tǒng)中迷雪,為了提高系統(tǒng)的可靠性和性能,都會(huì)采用代理來(lái)分發(fā)用戶的請(qǐng)求虫蝶,導(dǎo)致獲取用戶真實(shí)IP變得有些麻煩章咧。

獲取調(diào)用方IP的方法

直接調(diào)用HttpServletRequest中的request.getRemoteAddr()方法,獲取的IP地址能真,是當(dāng)前服務(wù)的上游服務(wù)的IP地址赁严,在沒(méi)有代理的情況下是準(zhǔn)確的扰柠,不過(guò)一般都會(huì)有一個(gè)或者多個(gè)代理,這種方式一般不適用疼约。一般可能用如下幾個(gè)字段

X-FORWARDED-FOR

X-FORWARDED-FOR這個(gè)http頭是個(gè)調(diào)試參數(shù)卤档,在代理服務(wù)器上做相關(guān)的配置,能夠?qū)崿F(xiàn)程剥,在經(jīng)過(guò)每一個(gè)代理的時(shí)候劝枣,會(huì)往后追加上代理的IP地址;這樣通過(guò)這個(gè)字段就可以知道织鲸,這個(gè)請(qǐng)求被代理了多少次舔腾,每次代理是由那個(gè)IP處理的;所以取列表第一個(gè)IP就是用戶的真實(shí)IP地址了搂擦。

nginx支持X-FORWARDED-FOR的配置:


proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Proxy-Client-IP

用apache http做代理時(shí)一般會(huì)加上Proxy-Client-IP請(qǐng)求頭

WL-Proxy-Client-IP

weblogic插件加上的頭

HTTP_CLIENT_IP

有些代理服務(wù)器會(huì)加上此請(qǐng)求頭稳诚。

X-Real-IP

在nginx中可以把上游調(diào)用的真實(shí)IP加到HTTP請(qǐng)求頭中,這個(gè)IP從remote_addr變量中獲取是從TCP鏈接中獲取的真實(shí)IP瀑踢。


proxy_set_header X-Real-IP $remote_addr;

某些特殊情況

正常我們會(huì)按照上面的順序按照優(yōu)先級(jí)獲取真實(shí)的IP地址扳还。網(wǎng)上一般都會(huì)把X-FORWARDED-FOR這個(gè)參數(shù)作為第一優(yōu)先級(jí)來(lái)處理。但是這個(gè)參數(shù)實(shí)際上是不安全的橱夭。

X-FORWARDED-FOR這個(gè)參數(shù)的值是個(gè)列表氨距,每次經(jīng)過(guò)代理都是往后追加,而不是覆蓋的徘钥。所以不能確保IP是可信的衔蹲。客戶端可以先偽造一個(gè)IP放到頭部呈础,真實(shí)IP就會(huì)在偽造IP之后了。比如:

客戶端偽造


X-FORWARDED-FOR: 1.1.1.1

經(jīng)過(guò)兩次代理(192.168.1.2,192.168.1.3)之后:


X-FORWARDED-FOR: 1.1.1.1,108.10.10.123,192.168.1.2,192.168.1.3

這樣獲取到的IP地址是1.1.1.1橱健,而不是真正的108.10.10.123而钞。其實(shí)真實(shí)IP已經(jīng)在列表中了,怎么避免獲取偽造的IP拘荡?

nginx有個(gè)realip模塊臼节,可以通過(guò)set_real_ip_from命令制定代理服務(wù)器的IP,因?yàn)榇矸?wù)器的IP地址都是已知的,所以可以通過(guò)從右至左依次獲取第一個(gè)不在代理IP列表中的合法IP就是用戶真實(shí)IP地址了珊皿。


set_real_ip_from  192.168.1.2;

set_real_ip_from  192.168.1.3;

real_ip_header    X-Forwarded-For;

real_ip_recursive on;

安裝realip模塊需要重新編譯nginx网缝,比較麻煩,也可以直接通過(guò)最上層代理(第一層代理)服務(wù)器獲取用戶真實(shí)IP蟋定,寫(xiě)入http頭部粉臊,后端服務(wù)優(yōu)先獲取此參數(shù)即可。比如:第一層代理是nginx,將remote_addr參數(shù)寫(xiě)入X-Real-IP驶兜,后端優(yōu)先獲取此參數(shù)扼仲,其他代理不要覆蓋此參數(shù)即可远寸;由于參數(shù)是覆蓋寫(xiě)入的,就算客戶端偽造一個(gè)X-Real-IP參數(shù)頭屠凶,也會(huì)被代理服務(wù)器復(fù)寫(xiě)為真實(shí)的IP.

參考

http://www.reibang.com/p/1e0124de8e02

http://nginx.org/en/docs/http/ngx_http_realip_module.html

轉(zhuǎn)自: https://heqiao2010.github.io

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驰后,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矗愧,更是在濱河造成了極大的恐慌灶芝,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉韭,死亡現(xiàn)場(chǎng)離奇詭異夜涕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)纽哥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)钠乏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人春塌,你說(shuō)我怎么就攤上這事晓避。” “怎么了只壳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵俏拱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吼句,道長(zhǎng)锅必,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任惕艳,我火速辦了婚禮搞隐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘远搪。我一直安慰自己劣纲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布谁鳍。 她就那樣靜靜地躺著癞季,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倘潜。 梳的紋絲不亂的頭發(fā)上绷柒,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音涮因,去河邊找鬼废睦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蕊退,可吹牛的內(nèi)容都是我干的郊楣。 我是一名探鬼主播憔恳,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼净蚤!你這毒婦竟也來(lái)了钥组?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤今瀑,失蹤者是張志新(化名)和其女友劉穎程梦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體橘荠,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屿附,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哥童。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挺份。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贮懈,靈堂內(nèi)的尸體忽然破棺而出匀泊,到底是詐尸還是另有隱情,我是刑警寧澤朵你,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布各聘,位于F島的核電站,受9級(jí)特大地震影響抡医,放射性物質(zhì)發(fā)生泄漏躲因。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一忌傻、第九天 我趴在偏房一處隱蔽的房頂上張望大脉。 院中可真熱鬧,春花似錦水孩、人聲如沸箱靴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棍矛,卻和暖如春安疗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背够委。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工荐类, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茁帽。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓玉罐,卻偏偏與公主長(zhǎng)得像屈嗤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吊输,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355