Http

訪問 HAProxy 中的代理協議地址

  • November 16, 2015

我正在執行從上游源接收第 4 層代理協議的 HAProxy。我需要創建一個自定義 HTTP 標頭,其中包含地址。我似乎找不到如何引用該 TCP 標頭。

以下是我正在嘗試做的範例:

frontend http_in
   bind *:1025 accept-proxy
   mode http
   default_backend http_out

backend http_out
   mode http
   http-request set-header X-Custom-Header %[<ip from proxy protocol header>]
   server some-server some-server:80

如何確保使用 L4 標頭中的地址而不是一些可欺騙的 http 標頭填充新標頭?

根據 bind 選項的文件accept-proxy以及更一般地使用 PROXY 協議,PROXY 協議標頭中包含的所有欄位(源 IP 和埠、目標 IP 和埠)都替換了真實連接中的欄位:

PROXY 協議規定在

任何使用地址的地方都使用傳入連接的第 3/4 層地址,唯一的

例外是“tcp-request 連接”規則,它只會看到

真實的連接地址。日誌將反映協議中指示的地址

,除非違反協議,在這種情況下

仍將使用真實地址。

這意味著您的後端看起來像

backend http_out
   mode http
   http-request set-header X-Custom-Header %[src]
   server some-server some-server:80

這是有效的,因為src範例欄位將包含 PROXY 標頭中定義的源 IP,而不是實際的源 IP。

引用自:https://serverfault.com/questions/736834