CDN下nginx獲取使用者真實IP位址

2022-10-11 16:57:13 字數 2707 閱讀 5494

隨著nginx的迅速崛起,越來越多公司將apache更換成nginx. 同時也越來越多人使用nginx作為負載均衡, 並且**前面可能還加上了cdn加速,但是隨之也遇到乙個問題:nginx如何獲取使用者的真實ip位址,如果後端是apache,請跳轉到例項環境:

使用者ip 120.22.11.11

cdn前端 61.22.22.22

cdn中轉 121.207.33.33

公司nginx前端** 192.168.50.121(外網121.207.231.22)

1、使用cdn自定義ip頭來獲取

假如說你的cdn廠商使用nginx,那麼在nginx上將$remote_addr賦值給你指定的頭,方法如下:

1proxy_set_header remote-user-ip$remote_addr;

//如上,後端將會收到remote_user_ip的http頭,有些人可能會挑錯了,說我設定的頭不是remote-user-ip嗎,怎麼寫成了remote_user_ip,是不是作者寫錯了.請參考文章:後端php**getremoteuserip.php12

訪問getremoteuserip.php,結果如下:

1120.22.11.11//取到了真實的使用者ip,如果cdn能給定義這個頭的話,那這個方法最佳

2、通過http_x_forwarded_for獲取ip位址

一般情況下cdn伺服器都會傳送http_x_forwarded_for頭,這是乙個ip串,後端的真實伺服器獲取http_x_forwarded_for頭,擷取字串第乙個不為unkown的ip作為使用者真實ip位址, 例如:

120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121(使用者ip,cdn前端ip,cdn中轉,公司nginx**)

訪問getfor.php結果如下:

1120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121

如果你是php程式設計師,你獲取第乙個不為unknow的ip位址,這邊就是120.22.11.11.

3.使用nginx自帶模組realip獲取使用者ip位址

安裝nginx之時加上realip模組,我的引數如下:

真實伺服器nginx配置12

3456

78910

1112

1314

1516

1718

1920

2122

2324

25server

location=/getrealip.php

}getrealip.php內容12

34<?php

$ip=$_server['remote_addr'];

echo$ip;

?>

訪問www.ttlsa.com/getrealip.php,返回:

1120.22.11.11

如果注釋 real_ip_recursive on或者 real_ip_recursive off

訪問www.ttlsa.com/getrealip.php,返回:

1121.207.33.33

很不幸,獲取到了中繼的ip,real_ip_recursive的效果看明白了吧.

set_real_ip_from:真實伺服器上一級**的ip位址或者ip段,可以寫多行

real_ip_header:從哪個header頭檢索出要的ip位址

real_ip_recursive:遞迴排除ip位址,ip串從右到左開始排除set_real_ip_from裡面出現的ip,如果出現了未出現這些ip段的ip,那麼這個ip將被認為是使用者的ip。例如我這邊的例子,真實伺服器獲取到的ip位址串如下:

120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121

在real_ip_recursive on的情況下

61.22.22.22,121.207.33.33,192.168.50.121都出現在set_real_ip_from中,僅僅120.22.11.11沒出現,那麼他就被認為是使用者的ip位址,並且賦值到remote_addr變數

在real_ip_recursive off或者不設定的情況下

192.168.50.121出現在set_real_ip_from中,排除掉,接下來的ip位址便認為是使用者的ip位址

如果僅僅如下配置:12

34set_real_ip_from192.168.50.0/24;

set_real_ip_from127.0.0.1;

real_ip_headerx-forwarded-for;

real_ip_recursive on;

訪問結果如下:

1121.207.33.33

4、三種在cdn環境下獲取使用者ip方法總結

CDN下nginx獲取使用者真實IP位址

隨著nginx的迅速崛起,越來越多公司將apache更換成nginx.同時也越來越多人使用nginx作為負載均衡,並且 前面可能還加上了cdn加速,但是隨之也遇到乙個問題 nginx如何獲取使用者的真實ip位址 例項環境 使用者ip 120.22.11.11 cdn前端 61.22.22.22 cd...

nginx獲取使用者真實ip

我們有的介面牽扯到使用者資訊的變更,這些介面只允許接入方來調我們,所以我們在nginx上,關於這些介面都個ip白名單,裡面配上接入方的出口ip。下面是我們nginx的access裡的日誌。nginx取的我們這個 remote addr 當做真實ip了,而事實上,http x forwarded fo...

nginx獲取使用者真實ip

我們訪問網際網路上的服務時,大多數時,客戶端並不是直接訪問到服務端的,而是客戶端首先請求到反向 反向 再 到服務端實現服務訪問,通過反向 實現路由 負載均衡等策略。這樣在服務端拿到的客戶端ip將是反向 ip,而不是真實客戶端ip,因此需要想辦法來獲取到真實客戶端ip 客戶端訪問服務端的資料流走向 c...