簡體   English   中英

如何使用HAproxy剝離代理協議?

[英]How to strip Proxy protocol with HAproxy?

請考慮以下情況:

                                      Internet
                                         ||
                                         ||
                                  .------''------.
                                  | HTTPS (:443) |
                                  '------..------'
                                         ||
                 .-----------------------'|
                 |                       \/
                 |           3rd party HAproxy service
                 |                       ||
                 |                       ||
             optional        .-----------''-----------.
               route         | PROXY Protocol (:5443) |
                 |           '-----------..-----------'
                 |                       ||                                 ________
      ___________|_______________________||________________________________| SERVER |____
     |           |                       \/                                              |
     |           |                 local HAproxy                                         |
     |           |                       ||                                              |
     |           |                       ||                                              |
     |           |                .------''------.                                       |
     |           |                | HTTPS (:443) |                                       |
     |           |                '------..------'                                       |
     |           |                       ||                                              |
     |           |                       ||                                              |
     |           |                       \/                                              |
     |           '---------------> local webserver                                       |
     |___________________________________________________________________________________|

后端服務器在本地分別在端口5443和443上運行HAproxy和Apache httpd。

我的本地網絡服務器不支持PROXY協議。 因此,我希望HAproxy從第三方服務中捕獲PROXY協議,然后將數據通過HTTPS或僅通過TCP傳遞到本地Web服務器。

對於HTTPS,我想它應該使用正確的SSL證書處理HTTP數據包,以在X-Forwarded-For HTTP標頭(應由PROXY協議提供)中添加原始發送方IP。

但是,如果您是HAproxy的新手,那么HAproxy文檔太糟糕了,我找不到能說明如何執行此操作的示例。 我知道這是有可能的,因為HAproxy被列為“支持代理協議的軟件” ,但是如何?

是的,您需要在前端聲明中的bind之后使用accept-proxy關鍵字 最好閱讀給定的“第三方HAproxy服務”中使用的相關send-proxy關鍵字

可以使用以下HAproxy配置將PROXY協議剝離回其原始狀態:

frontend app-proxy
  bind *:5443 accept-proxy
  mode tcp
  option tcplog
  default_backend app-httpd
backend app-httpd
  mode tcp
  server app1 127.0.0.1:443 check

這將在端口5443上接受PROXY協議,將其剝離,然后將TCP數據發送到443

如果您想處理SSL加密的TCP數據中的HTTP數據包,則需要訪問正確的SSL證書(您的Web服務器應該已經可以訪問該證書)。 這就是您可能想要做的。

frontend app-proxy
  bind *:5443 accept-proxy ssl crt /path/to/certnkey-file.pem
  mode http
  option httplog
  default_backend app-httpd
backend app-httpd
  mode http
  server app1 127.0.0.1:443 check ssl verify none

后一種方法的優點是原始客戶端數據在通過代理時會保留下來,這樣您就可以知道訪問者的原始IP是什么。 首先就是使用PROXY協議的整個想法! HAproxy將自動使用使用PROXY協議傳輸的正確IP地址更新X-Forwarded-For標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM