All Products
Search
Document Center

Server Load Balancer:Mengambil alamat IP klien dengan Pendengar Lapisan 7 CLB

Last Updated:Aug 27, 2026

Ambil alamat IP klien dari header HTTP X-Forwarded-For saat menggunakan Pendengar Lapisan 7 CLB.

Cara kerja

Pendengar Lapisan 7 CLB (HTTP/HTTPS) menyimpan alamat IP klien dalam header HTTP X-Forwarded-For. Server backend dapat mengambil alamat ini setelah dikonfigurasi.

Field X-Forwarded-For memiliki format berikut:

X-Forwarded-For: <alamat IP klien, IP-proxy-server-1, IP-proxy-server-2, ...>

Saat menggunakan metode ini, alamat IP paling kiri dalam daftar adalah alamat IP klien.

CLB menghentikan tugas HTTPS dan berkomunikasi dengan server backend melalui HTTP. Konfigurasikan server backend hanya untuk HTTP, meskipun menggunakan pendengar HTTPS.

Prosedur

Prasyarat

Langkah 1: Verifikasi bahwa pendengar menggunakan X-Forwarded-For

  1. Masuk ke Konsol Classic Load Balancer (CLB).

  2. Pada bilah navigasi atas, pilih wilayah tempat instans ditempatkan.

  3. Pada halaman Instances, temukan instans target dan klik ID-nya.

  4. Pada halaman Instance Details, klik tab Listener, temukan pendengar Lapisan 7 target, lalu klik ID-nya.

  5. Pada halaman detail pendengar, verifikasi bahwa bagian Custom HTTP Header mencakup X-Forwarded-For: Retrieve Client IP.

    Secara default, pendengar Lapisan 7 CLB menggunakan header X-Forwarded-For untuk mengambil alamat IP klien. Fitur ini tidak dapat dinonaktifkan.

Langkah 2: Konfigurasikan server backend

  • Bagian ini menjelaskan cara mencatat alamat IP klien dalam log akses server backend (melalui field X-Forwarded-For). Variabel lapisan koneksi (seperti $remote_addr Nginx) tetap menampilkan IP forwarding CLB dan tidak terpengaruh.

  • Jika Anda ingin mengganti variabel lapisan koneksi (seperti $remote_addr) dengan IP klien sebenarnya agar format log yang ada, kontrol akses, dan aturan pembatasan laju tetap berfungsi tanpa modifikasi, lihat Ganti alamat lapisan koneksi dengan IP klien (Nginx dan Apache).

Server Nginx

Lingkungan contoh: CentOS 7.9 dengan Nginx 1.20.1. Konfigurasi Anda mungkin berbeda.

  1. Jalankan nginx -V | grep http_realip_module untuk memeriksa apakah modul http_realip_module telah diinstal. Nginx menggunakan modul ini untuk mengurai catatan X-Forwarded-For.

    Jika output mencakup --with-http_realip_module, modul tersebut telah diinstal. Lanjutkan ke langkah berikutnya.

    Contoh output jika modul http_realip_module telah diinstal

    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    
    Modul http_realip_module tersedia sejak Nginx 1.0.4 (2011). Jika Anda menggunakan versi yang lebih lama, backup konfigurasi Anda dan lakukan upgrade Nginx.
    Jika modul http_realip_module belum diinstal, kompilasi ulang Nginx dengan modul tersebut atau instal ulang Nginx menggunakan manajer paket seperti yum.
  2. Edit file konfigurasi Nginx. Jalankan nginx -t untuk menemukan path file tersebut. Default-nya adalah /etc/nginx/nginx.conf.

    http {
      # Pastikan log_format mencakup $http_x_forwarded_for. Variabel ini mencatat nilai X-Forwarded-For.
      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      
      # ...
    }
    
  3. Jalankan perintah sudo nginx -s reload untuk memuat ulang konfigurasi Nginx.

Server Apache

Lingkungan contoh: CentOS 7.9 dengan Apache 2.4.6. Konfigurasi Anda mungkin berbeda.

  1. Jalankan httpd -M | grep remoteip_module untuk memeriksa apakah modul remoteip_module telah diinstal. Apache menggunakan modul ini untuk mengurai catatan X-Forwarded-For.

    Jika output mencakup remoteip_module (shared), modul tersebut telah diinstal. Lanjutkan ke langkah berikutnya.

    Modul remoteip_module tersedia sejak Apache 2.4.0 (2012). Jika Anda menggunakan versi yang lebih lama, backup konfigurasi Anda dan lakukan upgrade Apache.
    Jika modul remoteip_module belum diinstal, kompilasi ulang Apache dengan modul tersebut atau instal ulang Apache menggunakan manajer paket seperti yum.
  2. Edit file konfigurasi Apache. Path default-nya adalah /etc/httpd/conf/httpd.conf.

    # ...
    <IfModule log_config_module>
    	# Tambahkan %{X-Forwarded-For}i untuk mencatat informasi X-Forwarded-For.
      LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b" common
    	#...
    </IfModule>
    # ...
  3. Jalankan perintah sudo systemctl restart httpd untuk me-restart layanan Apache.

Server IIS

Lingkungan contoh: Windows Server 2016. Konfigurasi Anda mungkin berbeda.

  1. Unduh dan ekstrak file F5XForwardedFor.

  2. Berdasarkan arsitektur OS Anda, salin F5XFFHttpModule.dll dan F5XFFHttpModule.ini dari direktori x86\ atau x64\ ke lokasi yang memiliki izin baca IIS.

  3. Di Server Manager, buka IIS Manager.

  4. Pilih server dan klik ganda Modules.

  5. Klik Configure Native Modules, lalu klik Register.

  6. Tambahkan file .dll yang telah diunduh.

    1. Masukkan nama file, pilih path-nya, lalu klik OK.

    2. Sistem secara otomatis memilih modul yang baru didaftarkan. Klik OK.Register module

  7. Kembali ke halaman utama server dan klik ganda modul Logging. Konfigurasikan format log untuk mencatat field X-Forwarded-For.

    1. Klik Select Fields.

      image.png

    2. Di pojok kiri bawah, klik Add Field, tambahkan field log, lalu klik OK.

      image.png

    3. Di pojok kanan atas, klik Apply untuk menyimpan perubahan.

  8. Restart server IIS agar konfigurasi berlaku.

Langkah 3: Verifikasi pengambilan IP klien

Ikuti langkah-langkah sesuai jenis server Anda.

Server Nginx

Periksa log akses Nginx untuk memverifikasi pengambilan IP klien.

Path default log akses Nginx adalah /var/log/nginx/access.log.

IP paling kiri dalam field $http_x_forwarded_for adalah alamat IP klien.

image.png

Server Apache

Periksa log akses Apache untuk memverifikasi pengambilan IP klien.

Path default log akses Apache adalah /var/log/httpd/access_log.

IP paling kiri dalam field %{X-Forwarded-For}i adalah alamat IP klien.

image.png

Server IIS

Periksa log IIS untuk memverifikasi pengambilan IP klien.

Temukan path file log di modul Logging.

image.png

IP paling kiri dalam field X-Forwarded-For adalah alamat IP klien.

image.png

FAQ

Akses sering dari IP yang dimulai dengan 100

Sistem CLB meneruskan permintaan eksternal ke instans ECS backend dan melakukan pemeriksaan kesehatan. Kedua jenis permintaan tersebut berasal dari sistem.

Sistem CLB menggunakan blok CIDR 100.64.0.0/10 yang dicadangkan. Blok ini eksklusif untuk Alibaba Cloud dan tidak menimbulkan risiko keamanan, tetapi menjelaskan akses sering dari IP yang dimulai dengan 100.

Pastikan iptables dan perangkat lunak keamanan lain di server Anda tidak memblokir blok CIDR ini.

Mendapatkan IP klien dengan WAF, CDN, dan GA

Jika traffic melewati WAF, CDN, atau Global Accelerator (GA) sebelum mencapai CLB, Anda tetap dapat menggunakan X-Forwarded-For untuk mengambil IP klien. Layanan-layanan ini meneruskan X-Forwarded-For secara default tanpa konfigurasi tambahan.

Untuk mencegah spoofing X-Forwarded-For, gunakan header kustom untuk mencatat IP klien. Misalnya, dalam arsitektur client > CDN > WAF > CLB > ECS, CDN dapat meneruskan header Ali-Cdn-Real-Ip. Di WAF, pilih Specify header field sebagai metode penentuan IP klien dan atur headernya menjadi Ali-Cdn-Real-Ip. Atur variabel log Nginx menjadi $http_Ali_Cdn_Real_Ip.

Langkah keamanan tambahan:

  • Validasi dan filter header XFF di server backend. Periksa format dan alamat IP-nya, serta tolak nilai yang tidak valid atau mencurigakan.

  • Gunakan firewall dan ACL antara CLB dan server backend untuk memfilter permintaan serangan yang menargetkan header XFF.

  • Gunakan enkripsi SSL/TLS untuk melindungi komunikasi, termasuk transmisi header XFF, dari serangan man-in-the-middle.

Mendapatkan IP klien di lingkungan ACK

Dalam kluster Container Service for Kubernetes (ACK), metodenya sama tetapi beberapa detail operasional berbeda. FAQ manajemen jaringan.

Perbandingan pendengar Lapisan 4 vs Lapisan 7: perilaku IP sumber

Saat permintaan klien melewati CLB, IP sumber yang terlihat oleh server backend bergantung pada jenis pendengar:

Jenis pendengar

Penanganan IP sumber

remote_addr yang terlihat oleh server backend

Lapisan 4 (TCP/UDP)

CLB meneruskan langsung IP sumber klien

Alamat IP asal klien

Lapisan 7 (HTTP/HTTPS)

CLB bertindak sebagai reverse proxy dan membuat koneksi TCP baru dengan server backend

IP forwarding internal CLB (rentang 100.64.0.0/10)

Dengan pendengar Lapisan 7, CLB secara otomatis menambahkan header permintaan HTTP X-Forwarded-For untuk membawa alamat IP asal klien. Jika $remote_addr dalam log akses Nginx menampilkan IP forwarding internal CLB dalam rentang 100.64.0.0/10 alih-alih IP klien, hal ini merupakan perilaku yang diharapkan.

Ganti alamat lapisan koneksi dengan IP klien (Nginx dan Apache)

Nginx

Secara default, $remote_addr dalam log Nginx mencatat IP forwarding internal CLB (rentang 100.64.0.0/10). Untuk menggantinya dengan IP klien sebenarnya agar format log yang ada, kontrol akses, dan aturan pembatasan laju tetap berfungsi tanpa modifikasi, gunakan modul ngx_http_realip_module:

  1. Jalankan nginx -V | grep http_realip_module untuk memverifikasi bahwa modul telah diinstal.

  2. Tambahkan berikut ini ke blok http dalam file konfigurasi (default: /etc/nginx/nginx.conf):

    set_real_ip_from  100.64.0.0/10;
    real_ip_header    X-Forwarded-For;
    real_ip_recursive on;
  3. Jalankan sudo nginx -t untuk memvalidasi konfigurasi, lalu jalankan sudo nginx -s reload untuk memuat ulang.

Setelah konfigurasi berlaku, periksa log akses (default: /var/log/nginx/access.log) untuk memastikan bahwa $remote_addr kini menampilkan IP klien sebenarnya.
Jika traffic melewati beberapa proxy seperti WAF atau CDN, tambahkan rentang IP origin setiap lapisan proxy ke set_real_ip_from.
Permintaan pemeriksaan kesehatan (HEAD, tanpa X-Forwarded-For) tetap akan menampilkan $remote_addr sebagai 100.64.0.0/10, yang merupakan perilaku yang diharapkan.

Apache

Secara default, %h dalam log Apache mencatat IP forwarding internal CLB. Untuk menggantinya dengan IP klien sebenarnya agar format log yang ada dan aturan kontrol akses Require ip tetap berfungsi tanpa modifikasi, gunakan modul bawaan mod_remoteip di Apache 2.4:

  1. Jalankan httpd -M | grep remoteip_module untuk memverifikasi bahwa modul telah diinstal.

  2. Tambahkan berikut ini ke file konfigurasi (default: /etc/httpd/conf/httpd.conf):

    RemoteIPHeader       X-Forwarded-For
    RemoteIPTrustedProxy 100.64.0.0/10
  3. Jalankan sudo systemctl restart httpd untuk me-restart layanan Apache.

Setelah konfigurasi berlaku, periksa log akses (default: /var/log/httpd/access_log) untuk memastikan bahwa %h kini menampilkan IP klien sebenarnya.
Jika traffic melewati beberapa proxy seperti WAF atau CDN, tambahkan rentang IP origin setiap lapisan proxy ke RemoteIPTrustedProxy.
Permintaan pemeriksaan kesehatan (HEAD, tanpa X-Forwarded-For) tetap akan menampilkan %h sebagai 100.64.0.0/10, yang merupakan perilaku yang diharapkan.

Dokumen terkait

Jenis load balancer lain menggunakan metode yang berbeda: