Deskripsi wikipedia tajuk HTTP X-Forwarded-For
adalah:
X-Diteruskan-Untuk: client1, proxy1, proxy2, ...
Dokumentasi nginx untuk arahan real_ip_header
berbunyi, sebagian:
Arahan ini menetapkan nama header yang digunakan untuk mentransfer alamat IP pengganti.
Dalam hal X-Forwarded-For, modul ini menggunakan ip terakhir di header X-Forwarded-For untuk penggantian. [Tekankan milikku]
Kedua uraian ini tampaknya bertentangan satu sama lain. Dalam skenario kami, X-Forwarded-For
header persis seperti yang dijelaskan - alamat IP "asli" klien adalah entri paling kiri. Demikian pula, perilaku nginx adalah menggunakan nilai paling kanan - yang jelas merupakan salah satu server proxy kami.
Pemahaman saya X-Real-IP
adalah bahwa itu seharusnya digunakan untuk menentukan alamat IP klien yang sebenarnya - bukan proxy. Apakah saya kehilangan sesuatu, atau ini bug di nginx?
Dan, lebih dari itu, apakah ada yang punya saran untuk bagaimana membuat X-Real-IP
header menampilkan nilai paling kiri , seperti yang ditunjukkan oleh definisi X-Forwarded-For
?
sumber
Penguraian
X-Forwarded-For
header ini memang cacat pada modul realgin nginx.Ini dimulai di ujung kanan string header, dan segera setelah melihat spasi atau koma, berhenti melihat dan menempelkan bagian di sebelah kanan spasi atau koma dalam variabel IP. Jadi, itu memperlakukan alamat proksi terbaru sebagai alamat klien asli .
Itu tidak bermain bagus sesuai dengan spesifikasi; ini adalah bahaya jika tidak dijelaskan dengan istilah yang jelas menyakitkan di RFC.
Selain itu, bahkan sulit untuk menemukan sumber utama yang baik pada format, yang pada awalnya ditentukan oleh Squid - penggalian melalui dokumentasi mereka mengkonfirmasi pemesanan; paling kiri adalah klien asli, paling kanan adalah append terbaru. Saya sangat tergoda untuk menambahkan [rujukan?] Ke halaman wikipedia itu. Satu suntingan anonim tampaknya menjadi otoritas internet tentang masalah ini.
Jika memungkinkan, dapatkah Anda membuat proksi perantara Anda berhenti menambahkan diri mereka sendiri ke akhir header, hanya menyisakannya dengan alamat klien sebenarnya saja?
sumber
X-Forwarded-For
sudah ada. (itu adalah alamat IP klien yang benar) nginx sendiri kemudian mulai menambahkan alamat IP penyeimbang beban kami (hop sebelumnya) keX-Forwarded-For
header. (mungkin menambahkan apa yang dilihatnya sebagai "alamat jarak jauh") Jika itu tidak berhasil, saya akan dapat menggunakanX-Forwarded-For
header seperti sebelumnya. (Kami baru saja bermigrasi ke nginx)proxy_pass
- dan bahkan kemudian, hanya denganproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
di tempat.X-Forwarded-For
header dengan kemungkinan alamat klien asli di sebelah kiri dan mungkin proksi sebelumnya ditambahkan ke sana. Jadi proksi yang melayani saat ini akan menambahkan proksi sebelumnya (= inisiator) ke akhir daftar itu dan melayaniX-Forwarded-For
tajuk yang ditambah itu ke hop hulu berikutnya. Memang, mereka bisa memilih kata-kata yang lebih jelas.X-Real-IP adalah alamat IP dari klien sebenarnya yang dibicarakan oleh server (klien "nyata" dari server), yang, dalam kasus koneksi yang diproksi, adalah server proxy. Itu sebabnya X-Real-IP akan berisi IP terakhir di header X-Forwarded-For.
sumber
X-Real-IP
kembali alamat IP sendiri server proxy saya pernah berguna?