Saya punya masalah dengan HAproxy.
Saya menggunakan HAproxy sebagai penyeimbang beban yang mendistribusikan permintaan http masuk ke 5 server web. biasanya permintaan klien diteruskan ke server web dengan IP loadbalancer. Tetapi saya membutuhkan IP klien atau IP nyata yang meminta sesuatu dari server web. Karena kita perlu mencatat IP klien yang sebenarnya.
Saya mencoba untuk mendapatkan IP klien di server web tetapi saya tidak dapat berhasil hingga sekarang. Selalu saya melihat IP load balancer.
Saya menggunakan opsi x-forward-for tetapi tidak menyelesaikan masalah. Setelah itu saya menemukan pilihan lain " sumber 0.0.0.0:80 usingrc clientip " tetapi saya mendapatkan eror ketika mencoba menjalankan HAproxy yang adalah tentang kompilasi kebutuhan dengan opsi USE_TPROXY dari HAproxy. Saya melakukannya, saya mengkompilasi ulang HAproxy dengan opsi USE_TPROXY tetapi tidak mengubah apa pun. apa yang bisa saya lakukan untuk mempelajari IP klien nyata.
Versi kernel linux saya adalah 2.6.32-34 Maksud saya kernel tersebut mendukung proxy transparan. dan saya menggunakan UBUNTU 10.4 LTS
file konfigurasi saya ada di sini
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) Saat menguji HAproxy I menggunakan salah satu dari dua baris ini.
Apakah ada yang membantu saya mempelajari IP nyata dari klien yang diminta dari server kami?
Jawaban:
Saya memecahkan masalah ini. Bisa jadi itu bukan masalah sejak awal. Saya membuat pencarian google ketika saya menghadapi masalah ini, dan saya melihatnya
baris untuk digunakan dalam file haproxy.cfg dan juga opsi lainnya. Saya mencoba opsi-opsi tersebut termasuk mengkompilasi ulang haproxy ... Tetapi masalah sebenarnya terkait dengan belajar IP klien nyata pada server web tidak bersumber dari HAproxy, ini tentang membaca header dengan skrip server, dalam kasus kami bahasa skrip ini adalah PHP.
Saya mencoba mempelajari IP klien dengan perintah ini
dan perintah ini menampilkan IP loadbalancer. Ini benar tetapi bukan itu yang saya harapkan. Meskipun opsi forwardfor perintah ini, memberi saya IP loadbalancer
Dengan menggunakan opsi forwardfor, kami memungkinkan HAproxy untuk memasukkan header x-forwarded-for ke dalam permintaan klien yang dikirim ke server web kami. HAproxy menempatkan bidang ini ke tajuk tetapi saya mengabaikan ini. Hari ini saya menyadari bahwa ini adalah bidang tajuk dan saya harus membaca tajuk ini seperti ini
Dengan perintah ini saya mendapat alamat IP klien bukan alamat IP loadbalancer.
Tapi tawaran saya adalah untuk mendapatkan data header untuk menyelidiki informasi lainnya adalah fungsi getallheaders () untuk PHP.
Akhir dari semua file haproxy.cfg terakhir saya adalah seperti di bawah ini.
Namun demikian saya memiliki banyak hal yang hilang tentang HAproxy seperti apa arti uid atau gid.
sumber
Jika Anda memerlukan addr IP klien pada log Apache Anda dapat mengubah apache conf Anda untuk log X-forwarded-for di tempat sumber aslinya (5 jam)
sumber
Baru saja mencoba solusi @ System dan sepertinya nama header diubah dari
HTTP_X_FORWARDED_FOR
menjadix-forwarded-for
. Mungkin ini terkait dengan versi HAproxy, karena jawabannya ditulis 5 tahun yang lalu ...?Sebagai contoh, ini bekerja pada produksi:
String requestIp = httpRequest.getHeader("x-forwarded-for");
sumber