私はおそらくこの主題に関する大量のドキュメントで迷子になっていますが、 http://www.haproxy.org/download/)で説明されているように、PROProxyプロトコルヘッダーを送信するようにHAProxyプロセスを構成しようとしています。 1.8/doc/proxy-protocol.txt 。これは、PROXYプロトコルのサポートをC++サーバーに書き込んで(クライアントのIP /ポートにアクセスできるようにするため)、コードがPROXYヘッダーの解析で適切に機能することをテストしたいためです。
これが私の最小限の設定ファイルです:
global
maxconn 4096
defaults
log global
mode http
retries 3
option redispatch
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
frontend TestServerTest
bind 10.6.186.24:54781
mode tcp
default_backend TestServernodes
backend TestServernodes
mode tcp
# Note there is no 'check' after the below line unlike the others as we don't want to send the
# healthcheck ("OPTIONS / HTTP/1.0"...) string to the TestServer as it doesn't understand it!
server TestServer01 10.6.186.24:48080
HAProxyを起動して54781に接続すると、TestServerが48080で受信する最初のデータは、クライアントから送信されたデータであることがわかりました。私が投稿したリンクに記載されているPROXYヘッダーはではありません。
誰かが私の構成に欠けているものを教えてくれますか?それにより、PROXYヘッダーがバックエンドサーバーに送信されません。
HAProxyメーリングリスト([email protected])に投稿した後、どちらかを追加する必要があるという回答を得ましたsend-proxy
またはsend-proxy-v2
を私のバックエンドserver
定義に。
私の更新された設定ファイルには次の行があります:
サーバーTestServer01 10.6.186.24:48080 send-proxy
... PROXYプロトコルのバージョン1を送信します。
バージョン2を送信するには、これを
サーバーTestServer01 10.6.186.24:48080 send-proxy-v2
リンクしたドキュメントごとに、完全な構成ではいくつかのコンポーネントを構成する必要があります。
実際のバックエンドの前にhaproxyインスタンスがある場合、accept-proxy
を適用する必要があるかもしれません:
"accept-proxy"設定が "bind"キーワードに渡されると、待機ソケットはプロトコルを受け入れます。このようなリスナーで受け入れられた接続は、ソースが実際にプロトコルでアドバタイズされたものであるかのように動作します。これは、ロギング、ACL、コンテンツフィルタリング、透過プロキシなどに当てはまります。
これはあなたが答えで見つけた部分です、バックエンドサーバーはsend-proxyで設定する必要があります:
「サーバー」行に「送信プロキシ」設定が存在する場合、プロトコルはサーバーへの接続に使用できます。これはサーバーごとに有効になるため、リモートサーバーに対してのみ有効にしても、ローカルサーバーで異なる動作をさせることができます。着信接続が「accept-proxy」で受け入れられた場合、中継される情報は、この接続のPROXY行で通知されたものです。
そして、これは私がv2で見つけることができるものと同じです:
Haproxy 1.5は、PROXYプロトコルのバージョン2を送信側として実装しています。さらに、制限されたオプションのSSL情報を持つTLVが追加されました。