後端nginx使用set real ip

2021-08-26 16:01:58 字數 2306 閱讀 6231

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

例項環境:

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

proxy_set_header remote-user-ip $remote_addr;
後端php**getremoteuserip.php

?>訪問getremoteuserip.php,結果如下:

120.22.11.11 //取到了真實的使用者ip,如果cdn能給定義這個頭的話,那這個方法最佳
一般情況下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結果如下:

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

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

./configure --prefix=/usr/local/nginx-1.4.1 --with-http_realip_module
真實伺服器nginx配置

server 

location = /getrealip.php

}

getrealip.php內容

<?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的效果看明白了吧.

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或者不設定的情況下

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;

訪問結果如下:

121.207.33.33
缺點:需要cdn廠商提供

缺點:程式需要改動,以及使用者ip有可能是偽裝的

後端nginx使用set real ip

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

使用nginx前後端分離發布專案?

原理我就先不說了,直接上手 在右邊選擇download 我們選擇 nginx windows 1.14.1 然後會看到這樣乙個資料夾 我們可以用vscode開啟這個資料夾 然後開啟 conf nginx.conf檔案 找到server 把這server 裡的所有都注釋掉,然後新增這麼一段 如圖 li...

後端必備 Nginx 配置

curl x127.0.0.1 80 i 測試的max agehttp 日誌字段說明 字段說明 remote addr 和 http x forwarded for 客戶端 ip 位址 remote user 客戶端使用者名稱 request 請求的 uri 和 http 協議 status 請求狀...