nginx如何獲取用戶真實ip
nginx如何獲取用戶真實ip
我們有的接口牽扯到用戶信息的變更,這些接口只允許接入方來調(diào)我們,所以我們在nginx上,關(guān)于這些接口都個ip白名單,
里面配上接入方的出口ip。
下面是我們nginx的access里的日志。
nginx取的我們這個 $remote_addr 當(dāng)做真實ip了
而事實上,$http_X_Forwarded_For 才是用戶真實ip
$remote_addr只是我們f5的內(nèi)網(wǎng)地址(用戶 -->f5 --> nginx)
導(dǎo)致nginx取錯了,用戶調(diào)接口總是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、cd /usr/local/nginx-1.6.3
2、./configure --prefix=/usr/cmcc/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
3、 make && make install
溫馨提示:
- 1、set_real_ip_from 是指接受從哪個信任前代理處獲得真實用戶ip
- 2、real_ip_header 是指從接收到報文的哪個http首部去獲取前代理傳送的用戶ip
- 3、real_ip_recursive 是否遞歸地排除直至得到用戶ip(默認(rèn)為off)
首先,real_ip_header 指定一個http首部名稱,默認(rèn)是X-Real-Ip,假設(shè)用默認(rèn)值的話,nginx在接收到報文后,會查看http首部X-Real-Ip。
(1)如果有1個IP,它會去核對,發(fā)送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它會去認(rèn)為這個X-Real-Ip中的IP值是前代理告訴自己的,用戶的真實IP值,于是,它會將該值賦值給自身的$remote_addr變量;如果不被信任,那么將不作處理,那么$remote_addr還是發(fā)送方的ip地址。
(2)如果X-Real-Ip有多個IP值,比如前一方代理是這么設(shè)置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;
得到的是一串IP,那么此時real_ip_recursive 的值就至關(guān)重要了。
nginx將會從ip列表的右到左,去比較set_real_ip_from 的信任列表中的ip。
- 如果real_ip_recursive為off,那么,當(dāng)最右邊一個IP,發(fā)現(xiàn)是信任IP,即認(rèn)為下一個IP(右邊第二個)就是用戶的真正IP;
- 如果real_ip_recursive為on,那么將從右到左依次比較,知道找到一個不是信任IP為止。
然后同樣把IP值復(fù)制給$remote_addr。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx根據(jù)url中的path動態(tài)轉(zhuǎn)發(fā)到upstream的實現(xiàn)
這篇文章主要介紹了Nginx根據(jù)url中的path動態(tài)轉(zhuǎn)發(fā)到upstream的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片的代碼示例
這篇文章主要給大家介紹了nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片,文章通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以自己動手試一下2023-10-10Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持
這篇文章主要介紹了Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持,使用Nginx運行ThinkPHP的必備配置,需要的朋友可以參考下2015-07-07