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?

michaelg
sumber

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.

Michael Hampton
sumber
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