国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

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

點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!

 

01

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

02

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

 

03

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

3.1 在 Nginx 的 http 模塊內加入如下配置:

map $http_x_forwarded_for $clientRealIp {
"" $remote_addr;
~^(?P[0-9.]+),?.*$ $firstAddr;
}
注:而且代碼中還配合使用了$remote_addr,因此$clientRealIP 還能兼容客戶端直接訪問nginx代理的情況,不像$http_x_forwarded_for在直接訪問模式中將會是空值!
3.2 在nginx的upstream模塊內加入如下配置:
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服務:三臺web服務:39/40/41
4.1 測試
  • 通過瀏覽器訪問第一臺nginx地址加端口,如:http://ip36:8088
  • 通過其它服務器直接curl訪問,如:curl http://ip36:8088
4.2 驗證
第二層代理37/38nginx,統計兩臺nginx訪問日志,把客戶端地址和第三層web服務地址統計輸出,發現同一個客戶端只會出現在37/38其中一臺nginx訪問日志中,且也只會分發到后端web服務一臺服務器,驗證成功。
  • 37nginx訪問日志如圖所示:
  • 38nginx訪問日志如圖所示:



END



本文作者:徐 苗

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129461.html

相關文章

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

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

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

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

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

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

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

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

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

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

    felix0913 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

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