nginx獲取使用者真實ip

2021-08-14 11:28:57 字數 1596 閱讀 5987

我們有的介面牽扯到使用者資訊的變更,這些介面只允許接入方來調我們,所以我們在nginx上,關於這些介面都個ip白名單,

裡面配上接入方的出口ip。

下面是我們nginx的access裡的日誌。

nginx取的我們這個 $remote_addr 當做真實ip了,而事實上,$http_x_forwarded_for 才是使用者真實ip,$remote_addr只是我們f5的內網位址(使用者 -->f5 --> nginx),導致nginx取錯了,使用者調介面總是403。

解決方案:

在 http 模組 加

set_real_ip_from 172.17.10.125;

real_ip_header x-forwarded-for;

real_ip_recursive on;

即可!這裡我們新增之後啟動nginx報:

nginx: [emerg] unknown directive "set_real_ip_from" in /home/lnidmp/nginx/conf/nginx.conf:26

所以我們新增realip模組,重新編譯nginx

1、set_real_ip_from 是指接受從哪個信任前**處獲得真實使用者ip

2、real_ip_header 是指從接收到報文的哪個http首部去獲取前**傳送的使用者ip

3、real_ip_recursive 是否遞迴地排除直至得到使用者ip(預設為off) 

首先,real_ip_header 指定乙個http首部名稱,預設是x-real-ip,假設用預設值的話,nginx在接收到報文後,會檢視http首部x-real-ip。

(1)如果有1個ip,它會去核對,傳送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它會去認為這個x-real-ip中的ip值是前**告訴自己的,使用者的真實ip值,於是,它會將該值賦值給自身的$remote_addr變數;如果不被信任,那麼將不作處理,那麼$remote_addr還是傳送方的ip位址。

(2)如果x-real-ip有多個ip值,比如前一方**是這麼設定的:proxy_set_header x-real-ip $proxy_add_x_forwarded_for;

得到的是一串ip,那麼此時real_ip_recursive 的值就至關重要了。nginx將會從ip列表的右到左,去比較set_real_ip_from 的信任列表中的ip。如果real_ip_recursive為off,那麼,當最右邊乙個ip,發現是信任ip,即認為下乙個ip(右邊第二個)就是使用者的真正ip;如果real_ip_recursive為on,那麼將從右到左依次比較,知道找到乙個不是信任ip為止。然後同樣把ip值複製給$remote_addr。

nginx獲取使用者真實ip

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

flask nginx獲取使用者真實ip

應用使用flask框架開發,使用uswgi啟動,使用supervisor管理程序,使用nginx 服務。flask本身可以通過request.remote addr獲取使用者的ip,但是通過nginx 之後,獲取到的是本地位址或者區域網位址。為了在nginx 的環境下獲取使用者真實ip,可以通過以下...

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

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