當前位置:編程學習大全網 - 腳本源碼 - X-Forwarded-For和有效負載均衡

X-Forwarded-For和有效負載均衡

其實LVS進行動態負載均衡,根據客戶端訪問節點的ip進行分流隔離或者負載均衡,是有問題的。原因是實際上無法分辨客戶端源ip是真實ip還是代理IP。另外壹般情況下客戶端過來的訪問都是經過我們這邊服務端的反向代理的,此時更需要知道真實的ip。反向代理的例子比如,我訪問壹下Yahoo Finance查看Tesla的股價:

所以,自己公司DevOps搭建負載均衡服務器的時候,壹定要考慮這個問題,如何獲得發起請求的客戶端的真實IP,這個大多數情況下並不能獲得;但是如果沒有,就是偽負載均衡,只是對反向代理最前面壹層進行了負載均衡,並沒有對源ip進行負載均衡。

從上面看到實際上 Remote Address 就是反向代理服務器的地址, 是HTTP請求的遠程/源地址;三次握手就是用的這個地址,ACK時候也是;如果forgery這個那麽HTTP響應報文不能收到,所以這個偽造沒有任何意義,即 Remote Address 默認防偽造;而只有 Remote Address 用戶的真實IP地址將被丟失,因此有了HTTP擴展頭部 X-Forward-For . 反向代理服務器轉發用戶的HTTP請求時,需要將用戶的真實IP地址寫入到 X-Forward-For 中,以便後端服務能夠使用。由於 X-Forward-For 是可修改的,所以 X-Forward-For 中的地址在某種程度上不可信。在進行與安全有關的操作時,只能通過 Remote Address 獲取用戶的IP地址,不能相信任何請求頭

X-Forwarded-For 在Wikipedia的解釋: X-Forwarded-For

也就是LB和代理壹般是為了降低外部帶寬, 壹般我們都用了反向代理,屬於transparent proxy;

註:

X-Forward-For 跟 Referer 和 User-Agent 壹樣,都是 HTTP 中的頭域。HTTP/1.1 的 RFC 文檔編號為 2616,在 2616 中並未提及 X-Forward-For ,也就是說 HTTP/1.1 出現的時候 X-Forward-For 還沒出生。真正提出 X-Forward-For 的是2014 年的 RFC7239(詳見 https://www.rfc-editor.org/rfc/rfc7239.txt X-Forward-For 作為HTTP 擴展出現;

RFC7239 很長,實際上跟我們相關的只有幾個部分,例如: 1. Abstract ; 7.5. Example Usage

Abstract 是本文章的摘要,它描述了 RFC7239 的作用:

從這裏我們了解到 X-Forward-For 的正向用途是便於服務端識別原始 IP,並根據原始 IP 作出動態處理。例如服務端按照 IP 地址進行負載均衡時,如果能夠看破 IP 代理,取得原始 IP 地址,那麽就能夠作出有效的負載。否則有可能造成資源分配不均,導致假負載均衡的情況出現。

Example Usage 給了壹個例子:

X-Forwarded-For 格式:

如果壹個 HTTP 請求到達服務器之前,經過了三個代理 Proxy1、Proxy2、Proxy3,IP 分別為 IP1、IP2、IP3,用戶真實 IP 為 IP0,那麽按照 XFF 標準,服務端最終會收到以下信息:

所以,不論是從代理服務器第壹層還是最後壹層,都需要收集真實的IP才能進行真正的負載均衡

  • 上一篇:求幾部經典電影迅雷地址!
  • 下一篇:承兌匯票怎麽貼現
  • copyright 2024編程學習大全網