nginx如何獲取用戶真實(shí)ip
nginx如何獲取用戶真實(shí)ip
我們有的接口牽扯到用戶信息的變更,這些接口只允許接入方來調(diào)我們,所以我們在nginx上,關(guān)于這些接口都個(gè)ip白名單,
里面配上接入方的出口ip。
下面是我們nginx的access里的日志。

nginx取的我們這個(gè) $remote_addr 當(dāng)做真實(shí)ip了
而事實(shí)上,$http_X_Forwarded_For 才是用戶真實(shí)ip
$remote_addr只是我們f5的內(nèi)網(wǎng)地址(用戶 -->f5 --> nginx)
導(dǎo)致nginx取錯(cuò)了,用戶調(diào)接口總是403
解決方案
在 http 模塊 加
set_real_ip_from 172.17.10.125; real_ip_header X-Forwarded-For; real_ip_recursive on;
即可!
這里我們添加之后啟動(dòng)nginx報(bào):
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 是指接受從哪個(gè)信任前代理處獲得真實(shí)用戶ip
- 2、real_ip_header 是指從接收到報(bào)文的哪個(gè)http首部去獲取前代理傳送的用戶ip
- 3、real_ip_recursive 是否遞歸地排除直至得到用戶ip(默認(rèn)為off)
首先,real_ip_header 指定一個(gè)http首部名稱,默認(rèn)是X-Real-Ip,假設(shè)用默認(rèn)值的話,nginx在接收到報(bào)文后,會(huì)查看http首部X-Real-Ip。
(1)如果有1個(gè)IP,它會(huì)去核對,發(fā)送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它會(huì)去認(rèn)為這個(gè)X-Real-Ip中的IP值是前代理告訴自己的,用戶的真實(shí)IP值,于是,它會(huì)將該值賦值給自身的$remote_addr變量;如果不被信任,那么將不作處理,那么$remote_addr還是發(fā)送方的ip地址。
(2)如果X-Real-Ip有多個(gè)IP值,比如前一方代理是這么設(shè)置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;
得到的是一串IP,那么此時(shí)real_ip_recursive 的值就至關(guān)重要了。
nginx將會(huì)從ip列表的右到左,去比較set_real_ip_from 的信任列表中的ip。
- 如果real_ip_recursive為off,那么,當(dāng)最右邊一個(gè)IP,發(fā)現(xiàn)是信任IP,即認(rèn)為下一個(gè)IP(右邊第二個(gè))就是用戶的真正IP;
- 如果real_ip_recursive為on,那么將從右到左依次比較,知道找到一個(gè)不是信任IP為止。
然后同樣把IP值復(fù)制給$remote_addr。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Nginx代理后如何獲取客戶端真實(shí)IP地址
- nginx經(jīng)過多層代理后獲取真實(shí)來源ip過程詳解
- 基于Nginx 反向代理獲取真實(shí)IP的問題詳解
- Nginx 獲取客戶端真實(shí)IP $remote_addr與X-Forwarded-For的實(shí)現(xiàn)
- Nginx獲取客戶端真實(shí)IP(real_ip_header)的實(shí)現(xiàn)
- Nginx反向代理后無法獲取客戶端真實(shí)IP地址
- nginx獲取真實(shí)的ip的方法
- 基于nginx獲取代理服務(wù)ip以及客戶端真實(shí)ip詳解
- nginx獲取客戶端真實(shí)ip的常用方法
- Nginx獲取客戶端真實(shí)IP的原理及配置方法
- Nginx獲取IP地址變量的幾種方式
相關(guān)文章
Nginx限制某個(gè)IP同一時(shí)間段的訪問次數(shù)和請求數(shù)示例代碼
nginx可以通過ngx_http_limit_conn_module和ngx_http_limit_req_module配置來限制ip在同一時(shí)間段的訪問次數(shù).具體示例代碼大家參考下本文2017-08-08
nginx之virtual host虛擬主機(jī)的配置實(shí)現(xiàn)
虛擬主機(jī)(vhost)技術(shù)允許一臺(tái)物理服務(wù)器托管多個(gè)獨(dú)立網(wǎng)站或應(yīng)用,每個(gè)虛擬主機(jī)擁有獨(dú)立的域名、配置文件等,實(shí)現(xiàn)資源隔離管理,Nginx服務(wù)器通過配置文件實(shí)現(xiàn)虛擬主機(jī)設(shè)置,感興趣的可以了解一下2024-11-11
為什么我推薦Nginx作為后端服務(wù)器代理(原因解析)
這篇文章主要介紹了為什么我推薦Nginx作為后端服務(wù)器代理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Nginx之Http模塊系列之a(chǎn)utoindex模塊的具體使用
這篇文章主要介紹了Nginx之Http模塊系列之a(chǎn)utoindex模塊的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
nginx通過nginx_upstream_check_module實(shí)現(xiàn)后端健康檢查
nginx的健康檢查有兩種,一種是被動(dòng)健康檢查,也就是nginx自帶健康檢查模塊ngx_http_upstream_module,另一種就是主動(dòng)健康檢查,使用第三方模塊nginx_upstream_check_module,下面就來介紹一下,感興趣的可以了解一下2024-08-08
Nginx配置本地圖片服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Nginx配置本地圖片服務(wù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Nginx為已安裝nginx動(dòng)態(tài)添加模塊
本篇文章主要介紹了Nginx之為已安裝nginx動(dòng)態(tài)添加模塊的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04

