成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

nginx通過X-Forwarded-For獲取真實ip基于真實ip做hash

IT那活兒 / 2704人閱讀
nginx通過X-Forwarded-For獲取真實ip基于真實ip做hash

點擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!

 

01

場景
因為一次業(yè)務(wù)會多次訪問,但是訪問中會產(chǎn)生一些文件和圖片,所以后端真實服務(wù)需要做會話保持或者做文件共享服務(wù)。

02

解決方案
  • 文件共享服務(wù)可以使用nfs文件共享,也可以使用文件系統(tǒng)(如:fastdfs)做共享文件。
  • 可以通過redis做session共享。
  • 可以直接通過改動nginx做基于ip的會話保持,這種改動目前對于生產(chǎn)系統(tǒng)是改動最小,影響最小的。

 

03

Nginx解決方案
nginx常用的就是基于ip做hash,但是nginx前面如果還有代理或者套了一層CDN,直接ip_hash是無法均衡分配的,因為nginx會把前一層套的代理地址或CDN地址做hash算法分配給后端服務(wù)地址。

3.1 在 Nginx 的 http 模塊內(nèi)加入如下配置:

map $http_x_forwarded_for $clientRealIp {
"" $remote_addr;
~^(?P[0-9.]+),?.*$ $firstAddr;
}
注:而且代碼中還配合使用了$remote_addr,因此$clientRealIP 還能兼容客戶端直接訪問nginx代理的情況,不像$http_x_forwarded_for在直接訪問模式中將會是空值!
3.2 在nginx的upstream模塊內(nèi)加入如下配置:
upstream web {
hash $clientRealIp;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}

 

04

測試案列
第一層代理:單臺nginx:36
  • nginx配置如下圖所示:
第二層代理:兩臺nginx:37/38
  • 37/38nginx配置如下圖所示:
第三層web服務(wù):三臺web服務(wù):39/40/41
4.1 測試
  • 通過瀏覽器訪問第一臺nginx地址加端口,如:http://ip36:8088
  • 通過其它服務(wù)器直接curl訪問,如:curl http://ip36:8088
4.2 驗證
第二層代理37/38nginx,統(tǒng)計兩臺nginx訪問日志,把客戶端地址和第三層web服務(wù)地址統(tǒng)計輸出,發(fā)現(xiàn)同一個客戶端只會出現(xiàn)在37/38其中一臺nginx訪問日志中,且也只會分發(fā)到后端web服務(wù)一臺服務(wù)器,驗證成功。
  • 37nginx訪問日志如圖所示:
  • 38nginx訪問日志如圖所示:



END



本文作者:徐 苗

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129461.html

相關(guān)文章

  • 利用X-Forwarded-For偽造客戶端IP漏洞成因及防范

    摘要:在有反向代理的情況下,直接使用獲取到的地址是所在服務(wù)器的地址,而不是客戶端的。如何防范方法一在直接對外的反向代理服務(wù)器上配置如果有多層代理,內(nèi)層的配置在最外層即直接對外提供服務(wù)的使用代替上面的,可以防止偽造。 問題背景 在Web應(yīng)用開發(fā)中,經(jīng)常會需要獲取客戶端IP地址。一個典型的例子就是投票系統(tǒng),為了防止刷票,需要限制每個IP地址只能投票一次。 如何獲取客戶端IP 在Java中,獲取客...

    Yuqi 評論0 收藏0
  • docker進階,nginx部署的幾個重要點詳解以及開發(fā)流程---持續(xù)更新

    摘要:無論這個連接是外部主動建立的,還是內(nèi)部建立的。協(xié)議有表示層數(shù)據(jù)的表示安全壓縮。在整個發(fā)展過程中的所有思想和著重點都以一種稱為的文檔格式存在。 部署基礎(chǔ)知識url:協(xié)議://網(wǎng)站地址:端口(/)路徑地址?參數(shù)eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服務(wù)器 80端口:找服務(wù)器上提供服務(wù)的應(yīng)用 nginx uri:/ab...

    KunMinX 評論0 收藏0
  • docker進階,nginx部署的幾個重要點詳解以及開發(fā)流程---持續(xù)更新

    摘要:無論這個連接是外部主動建立的,還是內(nèi)部建立的。協(xié)議有表示層數(shù)據(jù)的表示安全壓縮。在整個發(fā)展過程中的所有思想和著重點都以一種稱為的文檔格式存在。 部署基礎(chǔ)知識url:協(xié)議://網(wǎng)站地址:端口(/)路徑地址?參數(shù)eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服務(wù)器 80端口:找服務(wù)器上提供服務(wù)的應(yīng)用 nginx uri:/ab...

    ytwman 評論0 收藏0
  • nginx配置解析之客戶端真實IP的傳遞

    摘要:前后端分離之后,采用作為靜態(tài)服務(wù)器,并通過反向代理的方式實現(xiàn)接口跨域的方式,在降低開發(fā)成本的同時也帶來了諸多問題,例如客戶端真實的獲取。 前后端分離之后,采用nginx作為靜態(tài)服務(wù)器,并通過反向代理的方式實現(xiàn)接口跨域的方式,在降低開發(fā)成本的同時也帶來了諸多問題,例如客戶端真實IP的獲取。 在一些特殊場景下,比如風(fēng)控和支付流程,往往需要獲取用戶的ip信息,但是nginx反向代理在實現(xiàn)跨域...

    Lsnsh 評論0 收藏0
  • 干貨:Java正確獲取客戶端真實IP方法整理

    摘要:但是在通過了,等反向代理軟件就不能獲取到客戶端的真實地址了。下面是一個參考獲取客戶端地址的方法如果使用的是連接池,可以參考使用方法,但這個是經(jīng)過多級代理的地址,需要自己處理下獲取第一個。 showImg(https://segmentfault.com/img/remote/1460000015379119); 在JSP里,獲取客戶端的IP地址的方法是:request.getRemot...

    felix0913 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<