Cara mencatat nilai asli $ remote_addr saat menggunakan Real-IP


9

Lingkungan saya memiliki permintaan pengguna yang melewati sejumlah sistem:

[Klien] -> [ELB] ---> [nginx] -> [web]

(ELB = Penyeimbang Beban AWS Elastis)

Berkat jawaban ini , saya harus menentukan dan meneruskan alamat IP klien yang benar ke server hulu (web) dengan header X-Forwarded-Fordan X-Real_IP. Konfigurasi nginx yang relevan:

    real_ip_header      X-Forwarded-For;
    set_real_ip_from        10.0.0.0/8;
    real_ip_recursive   on;
    proxy_set_header X-Real-IP $remote_addr;

Masalah saya adalah ini, modul Real IP di nginx menggantikan$remote_addr variabel yang ada dengan hasil X-Forwarded-Forperhitungannya. Ini memberi saya IP klien asal, tapi saya kehilangan alamat IP sistem yang benar-benar mengirim permintaan ke proxy (yaitu ELB).

Secara keseluruhan, memiliki IP klien lebih penting bagi saya, tetapi saya ingin dapat mencatat seluruh rantai permintaan sehingga saya dapat memahami (dan men-debug) bagaimana traffic mengalir. Saat ini, saya hanya dapat memiliki nginx log IP klien, IP sendiri, dan IP server hulu. Saya ingin dapat mencatat IP ELB juga.

Saya melihat X-Istence mengajukan pertanyaan yang sama pada 2013, dengan sedikit keberuntungan. Apakah ada yang berubah atau membaik sejak saat itu?

Jawaban:


8

Anda bisa mendapatkan alamat klien asli dari ELB penghubung dalam variabel$realip_remote_addr , tetapi perlu diketahui bahwa variabel ini hanya ditambahkan di nginx 1.9.7, jadi Anda harus menjalankan versi nginx yang sangat baru.


Terima kasih @Michael Hampton ♦! Saya kembali untuk menjawab pertanyaan saya sendiri karena setelah mengejar strategi alternatif, saya akhirnya menemukan $realip_remote_addr. Itu bekerja dengan indah. Sebenarnya mencoba untuk mendapatkan proxy_protocol untuk bekerja dan menemukan catatan patch nginx untuk 1.9.7
michaelg
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.