一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - nginx做負載CDN加速獲取端真實ip

nginx做負載CDN加速獲取端真實ip

2019-12-26 17:05lavafree Linux

在不用cdn的情況下,nginx做負載獲取真實ip時,nginx配置如下:

nginx做負載CDN加速獲取端真實ip
在不用cdn的情況下,nginx做負載獲取真實ip時,nginx配置如下:
Java代碼  
proxy_set_header        Host            $host;  
proxy_set_header        X-Real-IP       $remote_addr;  
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;  
然后后端服務器獲取ip代碼:
Java代碼  

復制代碼

代碼如下:


String address = request.getHeader("X-Forwarded-For"); 
if (address != null && address.length() > 0 
&& !"unknown".equalsIgnoreCase(address)) { 
return address; 

address = request.getHeader("Proxy-Client-IP"); 
if (address != null && address.length() > 0 
&& !"unknown".equalsIgnoreCase(address)) { 
return address; 

address = request.getHeader("WL-Proxy-Client-IP"); 
if (address != null && address.length() > 0 
&& !"unknown".equalsIgnoreCase(address)) { 
return address; 

return request.getRemoteAddr(); 


這樣就能獲取到真實的IP,服務器測試一下:
不加cdn,獲取得IP:123.116.126.51(我當前客戶端機器的真實IP)
然后加上加了cdn后,后去到的IP:123.116.126.51, 202.108.251.166(hosts指向cdn的ip)
即:client 真實IP,代理IP,google之,
X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP 代理或者負載均衡服務器時才會添加該項 。
標準格式如下:
X-Forwarded-For: client1, proxy1, proxy2
從標準格式可以看出,X-Forwarded-For頭信息可以有多個,中間用逗號分隔,第一項為真實的客戶端ip,剩下的就是曾經經過的代理或負載均衡的ip地址,經過幾個就會出現幾個。
當Nginx設置X-Forwarded-For等于$proxy_add_x_forwarded_for后會有兩種情況發生
1、如果從CDN過來的請求沒有設置X-Forwarded-For頭(通常這種事情不會發生),而到了我們這里Nginx設置將其設置為$proxy_add_x_forwarded_for的話,X-Forwarded-For的信息應該為CDN的IP,因為相對于Nginx負載均衡來說客戶端即為CDN,這樣的話,后端的web程序時死活也獲得不了真實用戶的IP的。
2、CDN設置了X-Forwarded-For,我們這里又設置了一次,且值為$proxy_add_x_forwarded_for的話,那么X-Forwarded-For的內容變成 ”客戶端IP,CDN的ip“如果是這種情況的話,那后端的程序通過X-Forwarded-For獲得客戶端IP,則取逗號分隔的第一項即可。
這個比較頭疼,如果只想獲取客戶端真實ip,那么只能修改我們后端代碼,如果有多個,那么取第一個。這不是我想要的,
那么怎么樣才能不修改就能真實IP呢?
Nginx中還有一個$http_x_forwarded_for變量,這個變量中保存的內容就是請求中的X-Forwarded-For信息。如果后端獲得X-Forwarded-For信息的程序兼容性不好的話(沒有考慮到X-Forwarded-For含有多個IP的情況),最好就不要將X-Forwarded-For設置為 $proxy_add_x_forwarded_for。應該設置為$http_x_forwarded_for或者干脆不設置!
上面這段話的意思是我們不加 $proxy_add_x_forwarded_for, 但是這樣不在cdn的情況下去會取不到真實IP,有沒有一個兩全齊美的方法呢?
經過幾種配置之后,發現做如下配置:
Java代碼      
proxy_set_header X-Forwarded-For  $http_x_forwarded_for;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      
這樣配置第一次獲取 $http_x_forwarded_for,如果不存在,那么獲取$proxy_add_x_forwarded_for。
這樣不管是否在cdn環境,都可以獲得一個客戶端IP。
(注:多層代理未測試)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲欧美专区精品久久 | 无套内射在线观看THEPORN | 国产美女亚洲精品久久久久久 | 800精品国产导航 | 亚洲国产免费观看视频 | 亚洲国产成人精品无码区APP | 四虎影视色费永久在线观看 | 久久五月综合婷婷中文云霸高清 | 国产美女亚洲精品久久久久久 | 色狠狠色狠狠综合天天 | 日本人交换乱理伦片 | 国内在线观看 | 日本xxxxxxxxx高清hd | 吃大胸寡妇的奶 | 国产精品中文 | 亚洲 小说 欧美 激情 另类 | 狗老公小说| 亚洲 综合 自拍 精品 在线 | 亚洲人成毛片线播放 | 天天性综合| 香蕉97超级碰碰碰免费公 | 91久色 | 脱jk裙的美女露小内内无遮挡 | 国产成人精品免费久久久久 | 门房秦大爷最新章节阅读 | 日本在线观看www | 日本激情网站 | 免费的网址 | 91精品国产91久久久久久麻豆 | 精品一区二区三区免费站 | 日韩欧美一区二区在线 | 久久国内精品 | 99久久免费看精品国产一区 | 二次元美女内裤凹陷太深 | 欧美精品一区二区三区免费 | 免费在线观看网址大全 | 荡娃艳妇系列小说 | 国产成人久久精品区一区二区 | 538精品视频在线观看 | 欧美精品一区二区三区久久 | 天天干夜夜玩 |