隨著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 請求狀...