Saya sedang menguji pengaturan server web baru yang mengalami beberapa masalah. Pada dasarnya, kami memiliki server web, di mana kodenya menggunakan IP jarak jauh untuk beberapa hal menarik, dan juga beberapa direktori apache diamankan ke beberapa IP tertentu (kantor kami, dll).
Namun, kami baru saja membuang ini di belakang ha_proxy sehingga kami dapat melihat menambahkan beberapa server aplikasi lagi, tetapi sekarang IP jarak jauh selalu datang sebagai ip proxy, bukan pengguna jarak jauh yang sebenarnya. Ini berarti kami tidak dapat mencapai beberapa lokasi, dan aplikasi kami berperilaku sedikit aneh di mana IP pengguna penting.
Konfigurasi kami adalah sebagai berikut:
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen farm xxx.xxx.xxx.xxx:80
mode http
cookie GALAXY insert
balance roundrobin
option httpclose
option forwardfor
stats enable
stats auth username:userpass
server app1 xxx.xxx.xxx.xxx:80 maxconn 1 check
option forwardfor header X-Real-IP
danreqidel ^X-Real-IP:
, ini berhenti memalsukan IP di log Anda. FYI:X-Real-IP
adalah header default untukNginX
opsi 'set_real_ip_from
.Ada cara untuk mengkompilasi ulang HAproxy untuk memasukkan Tproxy yang akan memungkinkan penerusan alamat sumber.
Ada posting blog di sini tentang hal itu: http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/
Beberapa catatan:
Kernel linux terbaru (2.6.28-11-server) termasuk dukungan untuk TProxy, jadi kompilasi ulang kernel tidak diperlukan.
Pastikan untuk mengonfigurasi server di web farm Anda dengan alamat gateway default yang mengarah ke server HAProxy.
sumber
Gunakan modul rpaf apache http://stderr.net/apache/rpaf/ Saya tahu ini dan posting lama tapi butuh waktu berhari-hari untuk menemukannya. Ini akan hadir untuk aplikasi apa pun x-forwarded-for ip.
sumber
Perhatikan bahwa tampaknya Anda dapat menimpa apa yang dilihat aplikasi saya saat mengubah tajuk Apache:
Namun, ini tidak berfungsi untuk akses Apache melalui "Izinkan dari" dll.
sumber
X-Forwarded-For
header yang ada sebagai alamat IP baru ditambahkan ke akhir daftar yang ada, dipisahkan oleh koma dan spasi. Ubah(.*)
to([^ ]*)$
menjadi hanya ambil IP terakhir ... atau gunakanmod_rpaf
ataumod_remoteip
untuk Apache 2.4 atau yang lebih baru.HAProxy, berdasarkan desain, tidak dapat meneruskan alamat IP asli ke server sebenarnya, seperti halnya proxy lainnya.
Salah satu solusi mungkin, jika satu-satunya masalah Anda adalah dengan server web, untuk melihat header HTTP penerusan-X, yang harus berisi alamat klien. Sekarang, itu cukup banyak aplikasi / bahasa tertentu, tetapi lihat contoh ini di php:
$headers = apache_request_headers();
$real_client_ip = $headers["X-Forwarded-For"];
Jika Anda juga ingin mencatat alamat asli, Anda dapat memodifikasi LogFormat di httpd.conf agar terlihat seperti ini:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{X-Forwarded-For}i\"" common
sumber
Ya, sepertinya X-Forwarded-for tidak berfungsi dengan baik untuk pengaturan Anda. Jadi, adakah alasan khusus bagi Anda untuk tetap menggunakan haproxy? Tampaknya IPVS lebih sesuai untuk kebutuhan Anda (saya benar-benar menggunakan ldirector yang pada gilirannya menggunakan ipvs).
Melihat:
http://kb.linuxvirtualserver.org/wiki/IPVS
dan
http://www.vergenet.net/linux/ldirectord/
Menggunakan IPVS dalam mode 'IP Tunneling' atau 'Direct Routing' menjaga alamat klien.
sumber
Coba mod_extract_forwarded dari http://www.openinfo.co.uk/apache/
sumber
Cara mudah dengan haproxy dalam mode tcp dan nginx:
tambahkan send-proxy sebagai opsi server:
haproxy.conf:
.
.
dengarkan ssl 0.0.0.0.0:443
mode tcp
menyeimbangkan saldo minimum
opsi httpchk DAPATKAN / ping
opsi log-kesehatan-cek
server w1 192.168.1.1:443 cek kirim-proxy cek-ssl memverifikasi tidak ada
server w2 192.168.1.1:443 cek cek-proxy cek-ssl memverifikasi tidak ada
.
.
Nginx memerlukan dukungan proxy-protokol
nginx.conf:
.
.
dengarkan 192.168.1.1:443 ssl proxy_protocol;
.
.
set_real_ip_from 192.168.1.0/24;
real_ip_header proxy_protocol;
.
.
sumber