国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

后端nginx使用set_real_ip_from獲取用戶真實(shí)IP

這篇具有很好參考價(jià)值的文章主要介紹了后端nginx使用set_real_ip_from獲取用戶真實(shí)IP。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?????????隨著nginx的迅速崛起,越來越多公司將apache更換成nginx. 同時也越來越多人使用nginx作為負(fù)載均衡, 并且代理前面可能還加上了CDN加速,但是隨之也遇到一個問題:nginx如何獲取用戶的真實(shí)IP地址.

前言:Nginx ngx_http_realip_module

官方說明:

Module ngx_http_realip_module

例子1

????????realip模塊的作用是:當(dāng)本機(jī)的nginx處于一個反向代理的后端時獲取到真實(shí)的用戶IP。

????????如果沒有realip模塊,nginx的access_log里記錄的IP會是反向代理服務(wù)器的IP,PHP中$_SERVER[‘REMOTE_ADDR’]的值也是反向代理的IP。

????????而安裝了realip模塊,并且配置正確,就可以讓nginx日志和php的REMOTE_ADDR都變成真實(shí)的用戶IP。

舉一個最簡單的例子,網(wǎng)絡(luò)架構(gòu)如圖:

后端nginx使用set_real_ip_from獲取用戶真實(shí)IP,Nginx,nginx

????????如果不做任何配置,后端web服務(wù)器nginx日志里記錄的IP將會是10.10.10.10,這個時候我們增加如下nginx配置:

set_real_ip_from 10.10.10.10;

real_ip_header X-Forwarded-For;

  • set_real_ip_from指令是告訴nginx,10.10.10.10是我們的反代服務(wù)器(信任服務(wù)器,記住這個名詞,下面會提到),不是真實(shí)的用戶IP,
  • real_ip_header則是告訴nginx真正的用戶IP是存在X-Forwarded-For請求頭中(對X-Forwarded-For不了解的同學(xué)請自行百度)。

????????重新加載nginx配置之后,就可以看到nginx日志里記錄的IP就是123.123.123.123了,php里的REMOTE_ADDR也是123.123.123.123。

????????realip模塊還提供了另外一個指令real_ip_recursive,可以用來處理更加復(fù)雜的情況,架構(gòu)如圖:

后端nginx使用set_real_ip_from獲取用戶真實(shí)IP,Nginx,nginx

????????這個時候如果還用上面的配置,后端nginx的日志里顯示的IP就變成了192.168.1.10了,這個時候就需要real_ip_recursive這個指令了。

set_real_ip_from 10.10.10.10;

set_real_ip_from 192.168.1.10;

real_ip_header X-Forwarded-For;

real_ip_recursive on;

官網(wǎng)文檔對于real_ip_recursive指令的解釋十分拗口,看了老半天才明白。

首先要明確一點(diǎn),realip模塊生效的前提是:直接連接nginx的ip是在set_real_ip_from中指定的。

  • 當(dāng)real_ip_recursive為off時,nginx會把real_ip_header指定的HTTP頭中的最后一個IP當(dāng)成真實(shí)IP
  • 當(dāng)real_ip_recursive為on時,nginx會把real_ip_header指定的HTTP頭中的最后一個不是信任服務(wù)器的IP當(dāng)成真實(shí)IP

????????在這個例子中,當(dāng)請求到達(dá)后端web服務(wù)器時,X-Forwarded-For應(yīng)該是123.123.123.123, 192.168.1.10。

????????如果real_ip_recursive為off,nginx取X-Forwarded-For的最后一個IP也就是192.168.1.10作為真實(shí)IP。

????????如果real_ip_recursive為on,由于192.168.1.10是信任服務(wù)器IP,所以nginx會繼續(xù)往前查找,發(fā)現(xiàn)123.123.123.123不是信任服務(wù)器IP,就認(rèn)為是真實(shí)IP了。

例子2:

實(shí)例環(huán)境:

  • 用戶IP 120.22.11.11
  • CDN前端 61.22.22.22
  • CDN中轉(zhuǎn) 121.207.33.33
  • 公司NGINX前端代理 192.168.50.121(外網(wǎng)121.207.231.22)

1、使用CDN自定義IP頭來獲取

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

proxy_set_header remote-user-ip $remote_addr;

后端PHP代碼getRemoteUserIP.php

<?php
$ip = getenv("HTTP_REMOTE_USER_IP"); 
echo $ip;
?>

訪問getRemoteUserIP.php,結(jié)果如下:

120.22.11.11 //取到了真實(shí)的用戶IP,如果CDN能給定義這個頭的話,那這個方法最佳

2、通過HTTP_X_FORWARDED_FOR獲取IP地址

????????一般情況下CDN服務(wù)器都會傳送HTTP_X_FORWARDED_FOR頭,這是一個ip串,后端的真實(shí)服務(wù)器獲取HTTP_X_FORWARDED_FOR頭,截取字符串第一個不為unkown的IP作為用戶真實(shí)IP地址, 例如:
????????120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121(用戶IP,CDN前端IP,CDN中轉(zhuǎn),公司NGINX代理)
getFor.php

<?php
$ip = getenv("HTTP_X_FORWARDED_FOR");
echo $ip;
?>

訪問getFor.php結(jié)果如下:

120.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模塊,我的參數(shù)如下:

./configure --prefix=/usr/local/nginx-1.4.1 --with-http_realip_module

真實(shí)服務(wù)器nginx配置

server {
? ? listen 80;
? ? server_name www.zcy.com;
? ? access_log /data/logs/nginx/www.ttlsa.com.access.log main;
? ? index index.php index.html index.html;
? ? root /data/site/www.ttlsa.com;
? ? ?
? ? location /
? ? {
? ? ? ? root /data/site/www.ttlsa.com;
? ? }
? ? ?
? ? location = /getRealip.php
? ? {
? ? ? ? set_real_ip_from 192.168.50.0/24;
? ? ? ? set_real_ip_from 61.22.22.22;
? ? ? ? set_real_ip_from 121.207.33.33;
? ? ? ? set_real_ip_from 127.0.0.1;

? ? ? ? real_ip_header X-Forwarded-For;
? ? ? ? real_ip_recursive on;
? ? ? ? ?
? ? ? ? fastcgi_pass unix:/var/run/phpfpm.sock;
? ? ? ? fastcgi_index index.php;
? ? ? ? ?
? ? ? ? include fastcgi.conf;
? ? }
}

getRealip.php內(nèi)容

<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo $ip;
?>

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

120.22.11.11

注釋 real_ip_recursive on或者 real_ip_recursive off:

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

121.207.33.33

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

  • set_real_ip_from:真實(shí)服務(wù)器上一級代理的IP地址或者IP段,可以寫多行
  • real_ip_header:從哪個header頭檢索出要的IP地址
  • real_ip_recursive:遞歸排除IP地址,ip串從右到左開始排除set_real_ip_from里面出現(xiàn)的IP,如果出現(xiàn)了未出現(xiàn)這些ip段的IP,那么這個IP將被認(rèn)為是用戶的IP。例如我這邊的例子,真實(shí)服務(wù)器獲取到的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都出現(xiàn)在set_real_ip_from中,僅僅120.22.11.11沒出現(xiàn),那么他就被認(rèn)為是用戶的ip地址,并且賦值到remote_addr變量。
????????在real_ip_recursive off或者不設(shè)置的情況下192.168.50.121出現(xiàn)在set_real_ip_from中,? 排除掉,接下來的ip地址便認(rèn)為是用戶的ip地址

如果僅僅如下配置:

set_real_ip_from 192.168.50.0/24;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

訪問結(jié)果如下:

121.207.33.33

4、三種在CDN環(huán)境下獲取用戶IP方法總結(jié)

4.1 CDN自定義header頭

  • 優(yōu)點(diǎn):獲取到最真實(shí)的用戶IP地址,用戶絕對不可能偽裝IP
  • 缺點(diǎn):需要CDN廠商提供

4.2 獲取forwarded-for頭

  • 優(yōu)點(diǎn):可以獲取到用戶的IP地址
  • 缺點(diǎn):程序需要改動,以及用戶IP有可能是偽裝的

4.3 使用realip獲取

  • 優(yōu)點(diǎn):程序不需要改動,直接使用remote_addr即可獲取IP地址
  • 缺點(diǎn):ip地址有可能被偽裝,而且需要知道所有CDN節(jié)點(diǎn)的ip地址或者ip段

參考

后端nginx使用set_real_ip_from獲取用戶真實(shí)IP-CSDN博客

nginx之ngx_http_realip_module使用詳解-騰訊云開發(fā)者社區(qū)-騰訊云文章來源地址http://www.zghlxwxcb.cn/news/detail-847128.html

到了這里,關(guān)于后端nginx使用set_real_ip_from獲取用戶真實(shí)IP的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • nginx獲取客戶端真實(shí)ip

    在nginx中獲取客戶端真實(shí)IP的方法有多種,以下是其中兩種常用的方法: 使用nginx的access_log模塊記錄請求日志,并在日志中包含客戶端的真實(shí)IP信息。例如: 在上述配置中,通過使用http_x_forwarded_for字段來獲取客戶端的真實(shí)IP地址。如果該字段不存在或不合法,則使用remote_ad

    2024年02月16日
    瀏覽(49)
  • nginx-獲取客戶端IP地址

    nginx-獲取客戶端IP地址

    上有服務(wù)器與客戶端中間是有nginx代理服務(wù)器的,上游服務(wù)器如何獲取客戶端真實(shí)ip地址? nginx代理服務(wù)器設(shè)置X-Forwarded-For的header參數(shù),代理服務(wù)器通過remote_addr獲取客戶端ip地址,將ip地址寫入nginx代理服務(wù)器的X-Forwarded-For中, 上游服務(wù)端通過在nginx的這個參數(shù)拿到客戶端IP地

    2024年02月11日
    瀏覽(26)
  • Nginx(二十) 獲取真實(shí)客戶端IP

    ????????客戶端在訪問互聯(lián)網(wǎng)應(yīng)用服務(wù)器時,與真實(shí)的應(yīng)用服務(wù)器之間會因?yàn)橛卸鄬臃聪虼?,而?dǎo)致真實(shí)應(yīng)用服務(wù)器獲取的僅是最近一層的反向代理服務(wù)器 IP。為使 Nginx 后端的上游服務(wù)器可以獲得真實(shí)客戶端 IP,Nginx 提供了 ngx_http_realip_module 模塊用以實(shí)現(xiàn)真實(shí)客戶端

    2024年01月16日
    瀏覽(31)
  • nginx如何獲取真實(shí)客戶端ip

    nginx作為反向代理服務(wù)器,即代理我們的服務(wù)端,下面介紹下如何配置nginx獲取真實(shí)的客戶端ip 1、配置nginx.con 2、在java程序中可以通過如下方式獲取: 這樣就可以打印出真實(shí)ip了!即request.getHeader(\\\"X-Real-IP\\\")的值 引用: 查看端口占用及釋放所占用的端口_查詢谷歌瀏覽器的端口

    2024年02月11日
    瀏覽(17)
  • nginx代理后,nodejs如何獲取用戶真實(shí)ip地址(包括websocket獲取用戶真實(shí)IP地址)

    nginx代理后,nodejs如何獲取用戶真實(shí)ip地址(包括websocket獲取用戶真實(shí)IP地址)

    因?yàn)閚ginx代理的原因,我們在請求頭中獲取到的用戶ip只是nginx代理的ip,并非用戶真實(shí)ip,原因是經(jīng)過反向代理后,由于在客戶端和web服務(wù)器之間增加了中間層,因此web服務(wù)器無法直接拿到客戶端的ip,可以通過$remote_addr變量拿到的將是反向代理服務(wù)器的ip地址。 第一步,修改

    2024年02月13日
    瀏覽(113)
  • 【Nginx】proxy_set_header的變量與X-Forwarded-For偽造客戶端IP漏洞

    【Nginx】proxy_set_header的變量與X-Forwarded-For偽造客戶端IP漏洞

    上面突然說,需要檢查Nginx反向代理的安全問題并給出了修改方法,小白的我一臉懵逼,明明都是中文,連在一起咋就看不明白了。于是乎,對著修改內(nèi)容簡單學(xué)習(xí)了一下,在此做個記錄,如有問題請大佬們指點(diǎn)指點(diǎn)。 在Nginx中的location里,我們通常會配置proxy_set_header,如下

    2024年02月19日
    瀏覽(20)
  • SpringBoot如何通過Nginx代理獲取真實(shí)IP

    springboot作為后臺代碼,獲取到的登錄IP是前臺的代理服務(wù)器地址,并不是用戶的真實(shí)IP地址,讓我們在做統(tǒng)計(jì)的時候無從下手。下面是一個后臺獲取IP地址的類,本質(zhì)上沒有什么問題,問題在于,Nginx給你的就是一個代理之后的地址,所以你當(dāng)然獲取不到真實(shí)的地址了。 那么如

    2024年01月17日
    瀏覽(97)
  • nginx獲取不到真實(shí)ip地址,注意這個細(xì)節(jié)

    1 一定要把proxy_pass語句放在最后面 location / { ????????proxy_set_header Host $host; ????????proxy_set_header X-Real-IP $remote_addr; ????????proxy_set_header REMOTE-HOST $remote_addr; ????????proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ????????client_max_body_size 1024m; ????????# 一

    2024年02月13日
    瀏覽(24)
  • Nginx代理后獲取客戶端真實(shí)IP地址

    Nginx代理后獲取客戶端真實(shí)IP地址

    在項(xiàng)目實(shí)際應(yīng)用中,我們可能會需要獲取到用戶也就是客戶端的真實(shí)IP地址,比如記錄系統(tǒng)操作日志等情況。 通常情況下我們可以使用以下方式來獲取IP地址 但是當(dāng)我們使用Nginx反向代理項(xiàng)目地址后,使用以上方法只能獲取到Nginx服務(wù)器的IP地址,并不是客戶端的IP地址。 解決

    2023年04月11日
    瀏覽(41)
  • Nginx通過用戶IP獲取所在國家及地理位置

    Nginx通過用戶IP獲取所在國家及地理位置

    Nginx是一款高性能、輕量級的Web服務(wù)器和反向代理服務(wù)器。它最初設(shè)計(jì)目的是為了解決C10k問題,即如何支持10,000個以上的并發(fā)連接。Nginx采用了事件驅(qū)動的異步非阻塞模型,可以在消耗較少的系統(tǒng)資源下處理更多的并發(fā)連接。由于其高性能和可靠性,Nginx逐漸成為了現(xiàn)代Web架構(gòu)

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包