![](/img/trans.png)
[英]Dialog between wildfly and haproxy - Invalid PROXY protocol header
[英]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.