HAproxyに問題があります。
着信HTTP要求を5つのWebサーバーに分散するロードバランサーとしてHAproxyを使用します。通常、クライアントリクエストは、ロードバランサーのIPを使用してWebサーバーに転送されます。しかし、Webサーバーから何かを要求するクライアントIPまたは実際のIPが必要です。実際のクライアントのIPを記録する必要があるためです。
WebサーバーでクライアントのIPを取得しようとしましたが、今のところ成功しません。ロードバランサーのIPが常に表示されます。
x-forward-forオプションを使用しますが、問題は解決しません。その後、別のオプション「source 0.0.0.0:80 usesrc clientip」を見つけましたが、HAproxyのUSE_TPROXYオプションを使用したコンパイルの必要性に関するHAproxyを実行しようとするとエラーが発生しました。USE_TPROXYオプションを使用してHAproxyを再コンパイルしましたが、何も変更しません。実際のクライアントのIPを学習するために何ができますか。
私のLinuxカーネルバージョンは2.6.32-34です。つまり、カーネルは透過プロキシをサポートしています。UBUNTU 10.4 LTSを使用します
私の設定ファイルはこちら
global
maxconn 100000
uid 99
gid 99
daemon
defaults
option forwardfor except 127.0.0.1
mode http
(1)source 0.0.0.0:80 interface hdr_ip(x-forwarded-for,-1)
(2)source 0.0.0.0:80 usesrc clientip
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen myWeb 0.0.0.0:80
mode http
balance source
option forwardfor header X-Client
option http-server-close
stats enable
stats refresh 10s
stats hide-version
stats scope .
stats uri /lb?stats
stats realm LB2\ Statistics
stats auth admin:xXx
server S1 192.168.1.117:80 check inter 2000 fall 3
server S2 192.168.1.116:80 check inter 2000 fall 3
server S3 192.168.1.118:80 check inter 2000 fall 3
(1)(2)HAproxyのテスト中に、これら2行のいずれかを使用しました。
誰かが私たちのサーバーからリクエストされているクライアントの実際のIPを知るのを助けてくれますか?