全部产品
Search
文档中心

Server Load Balancer:Memperoleh Alamat IP Asal Klien pada Server Backend melalui Application Load Balancer

更新时间:Nov 09, 2025

Jika Anda menggunakan pendengar Application Load Balancer (ALB) untuk meneruskan lalu lintas, alamat IP asal klien dapat diperoleh dari bidang X-Forwarded-For dalam Header HTTP.

Cara kerja X-Forwarded-For

Pendengar HTTP dan HTTPS mendukung header X-Forwarded-For. Anda dapat mengonfigurasi server backend untuk mengekstrak alamat IP klien dari header tersebut.

Format X-Forwarded-For:

X-Forwarded-For: <Alamat IP Klien, Alamat IP Proxy Server 1, Alamat IP Proxy Server 2, ...>

Alamat IP paling kiri dalam header X-Forwarded-For merupakan alamat IP klien.

Prosedur

Langkah 1: Periksa bahwa pendengar diaktifkan untuk memperoleh alamat IP menggunakan header X-Forwarded-For

  1. Masuk ke Konsol Application Load Balancer (ALB).

  2. Di bilah navigasi atas, pilih wilayah tempat instans diterapkan.

  3. Di halaman Instances, temukan instans target dan klik ID instansnya.

  4. Di halaman detail instans, klik tab Listener, temukan pendengar target, dan klik ID-nya.

  5. Di halaman detail pendengar, verifikasi bahwa Add HTTP Header mencakup Use the X-Forwarded-For Header to Obtain Client IP Addresses.

    Catatan

    Secara default, ALB diaktifkan untuk memperoleh alamat IP asal klien menggunakan header X-Forwarded-For.

Langkah 2: Konfigurasikan server backend

Pilih prosedur berikut berdasarkan jenis server backend yang digunakan.

Konfigurasikan server NGINX

Contoh ini menggunakan sistem operasi CentOS 7.9 dan NGINX 1.20.1. Sesuaikan konfigurasi sesuai dengan lingkungan Anda.

  1. Jalankan perintah nginx -V | grep http_realip_module di server NGINX untuk memeriksa apakah modul http_realip_module terinstal. Server NGINX menggunakan modul ini untuk mengurai nilai X-Forwarded-For.

    Jika --with-http_realip_module termasuk dalam output, itu menunjukkan bahwa http_realip_module terinstal di server NGINX dan Anda dapat melanjutkan ke langkah berikutnya.

    Contoh output yang menunjukkan bahwa http_realip_module terinstal

    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'
    
    Catatan
    • NGINX 1.0.4, dirilis pada tahun 2011, dan versi setelahnya mendukung modul http_realip_module. Jika versi NGINX Anda lebih awal dari 1.0.4, kami sarankan Anda mencadangkan data dan meningkatkan ke versi yang lebih baru.

    • Jika modul http_realip_module tidak terinstal di server NGINX, kompilasi ulang dan instalasi ulang NGINX, lalu tambahkan modul tersebut. Kami sarankan Anda menggunakan manajer paket seperti YUM untuk menginstal dan mengelola NGINX karena menyederhanakan proses.

  2. Ubah dan simpan file konfigurasi NGINX. Blok kode berikut menunjukkan contohnya. Jalankan perintah nginx -t untuk menanyakan jalur file konfigurasi, yang secara default adalah /etc/nginx/nginx.conf. Jalur tersebut dapat bervariasi berdasarkan lingkungan Anda.

    http {
      # Set variabel $http_x_forwarded_for, yang digunakan untuk merekam 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 file konfigurasi NGINX.

Konfigurasikan server Apache

Contoh ini menggunakan sistem operasi CentOS 7.9 dan Apache 2.4.6. Sesuaikan konfigurasi sesuai dengan lingkungan Anda.

  1. Jalankan perintah httpd -M | grep remoteip_module di server Apache untuk memeriksa apakah modul remoteip_module terinstal. Apache menggunakan modul ini untuk mengurai nilai X-Forwarded-For.

    Jika remoteip_module (shared) termasuk dalam output, itu menunjukkan bahwa modul tersebut terinstal di server Apache dan Anda dapat melanjutkan ke langkah berikutnya.

    Catatan
    • Apache 2.4.0, dirilis pada tahun 2012, dan versi setelahnya mendukung modul remoteip_module. Jika versi Apache Anda lebih awal dari 2.4.0, kami sarankan Anda mencadangkan data dan meningkatkan ke versi yang lebih baru.

    • Jika modul remoteip_module tidak terinstal di server Apache, kompilasi ulang dan instalasi ulang Apache, lalu tambahkan modul tersebut. Kami sarankan Anda menggunakan manajer paket seperti YUM untuk menginstal dan mengelola Apache karena menyederhanakan proses.

  2. Ubah dan simpan file konfigurasi Apache. Blok kode berikut menunjukkan contohnya. Jalur default file konfigurasi adalah /etc/httpd/conf/httpd.conf. Jalur tersebut dapat bervariasi berdasarkan lingkungan Anda.

    # ...
    <IfModule log_config_module>
    	# Tambahkan direktif LogFormat %{X-Forwarded-For}i, yang digunakan untuk merekam informasi tentang 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 memulai ulang Apache.

Konfigurasikan server IIS

Contoh ini menggunakan sistem operasi Windows Server 2016. Sesuaikan konfigurasi sesuai dengan lingkungan Anda.

  1. Unduh dan ekstrak file F5XForwardedFor.

  2. Salin file F5XFFHttpModule.dll dan F5XFFHttpModule.ini dari direktori x86\ atau x64 ke direktori di server IIS. Pastikan proses IIS memiliki izin baca dan tulis pada direktori tersebut.

  3. Buka IIS Manager di Server Manager.

  4. Pilih server IIS dan klik dua kali Modules.

  5. Klik Configure Native Modules, lalu klik Register di kotak dialog yang muncul.

  6. Tambahkan file .dll yang diunduh.

    1. Masukkan nama file, pilih jalur, lalu klik OK.

    2. Modul yang akan didaftarkan dipilih secara otomatis. Klik OK.

  7. Kembali ke halaman utama IIS Manager dan klik dua kali Logging. Konfigurasikan format log untuk merekam informasi tentang X-Forwarded-For.

    1. Klik Select Fields.

      image.png

    2. Klik Add Field di pojok kiri bawah, tambahkan bidang berikut, lalu klik OK.

      image.png

    3. Klik Apply di panel Aksi di sebelah kanan.

  8. Mulai ulang server IIS dan tunggu hingga konfigurasi selesai diterapkan.

Langkah 3: Uji apakah server backend dapat mengambil alamat IP klien

Pilih prosedur berikut berdasarkan jenis server backend yang digunakan.

Server NGINX

Jika Anda menggunakan server NGINX, Anda dapat memeriksa log NGINX untuk menentukan apakah server backend dapat mengambil alamat IP klien.

Jalur default log NGINX adalah /var/log/nginx/access.log.

Dalam setiap entri log, alamat IP paling kiri dalam variabel $http_x_forwarded_for adalah alamat IP klien.

image.png

Server Apache

Jika Anda menggunakan server Apache, Anda dapat memeriksa log Apache untuk menentukan apakah server backend dapat mengambil alamat IP klien.

Jalur default log Apache adalah /var/log/httpd/access_log.

Dalam setiap entri log, alamat IP paling kiri dalam variabel %{X-Forwarded-For}i adalah alamat IP klien.

image.png

Server IIS

Jika Anda menggunakan server IIS, Anda dapat memeriksa log IIS untuk menentukan apakah server backend dapat mengambil alamat IP klien.

Anda dapat menemukan jalur file log di modul Logging.

image.png

Dalam setiap entri log, alamat IP paling kiri dalam X-Forwarded-For adalah alamat IP klien.

image.png

FAQ

Mengapa alamat IP yang dimulai dengan 100 sering mengakses instans ECS?

Sistem Server Load Balancer meneruskan permintaan eksternal ke instans ECS backend. Sistem ini juga melakukan pemeriksaan kesehatan dan memantau ketersediaan layanan pada instans ECS. Permintaan akses tersebut berasal dari sistem Server Load Balancer.

Instans ALB yang ditingkatkan menggunakan alamat IP pribadi (Local IP) dari blok CIDR vSwitch mereka untuk berkomunikasi dengan instans ECS backend secara default. Sebaliknya, instans ALB lama menggunakan rentang alamat 100.64.0.0/10. Rentang 100.64.0.0/10 adalah blok CIDR yang dicadangkan oleh Alibaba Cloud. Alamat IP dalam rentang ini tidak dapat ditetapkan kepada pengguna lain, sehingga tidak ada risiko keamanan yang terkait. Jika Anda menggunakan instans ALB lama yang belum ditingkatkan, Anda mungkin melihat banyak permintaan akses dari alamat IP yang dimulai dengan 100.

Untuk memastikan ketersediaan layanan, pastikan server Anda tidak memblokir lalu lintas dari Local IP instans ALB atau blok CIDR 100.64.0.0/10. Ini mencakup pemblokiran lalu lintas menggunakan iptables atau perangkat lunak kebijakan keamanan pihak ketiga apa pun.

Bagaimana cara memperoleh alamat IP asal klien saat menggunakan WAF, CDN, atau GA

Jika lalu lintas diteruskan oleh produk seperti Web Application Firewall (WAF), CDN, atau Global Accelerator (GA) sebelum mencapai load balancer, Anda dapat memperoleh alamat IP asal klien dari bidang X-Forwarded-For. Produk-produk ini melewati bidang X-Forwarded-For secara default, tanpa memerlukan konfigurasi tambahan.

Jika bisnis Anda memiliki persyaratan keamanan tinggi dan Anda ingin mencegah pemalsuan X-Forwarded-For, Anda dapat mengambil langkah-langkah berikut:

  • Tentukan bidang header di produk lain untuk merekam alamat IP asal klien.

    Sebagai contoh, jika arsitektur Anda adalah Client > CDN > WAF > Server Load Balancer > ECS, CDN melewati bidang Ali-Cdn-Real-Ip dalam Header HTTP. Saat mengonfigurasi WAF, atur metode deteksi alamat IP klien untuk menggunakan bidang header yang ditentukan Ali-Cdn-Real-Ip. Kemudian, konfigurasikan variabel log di server backend Nginx sebagai $http_Ali_Cdn_Real_Ip. Alamat IP yang direkam dalam log adalah alamat IP asal klien.

  • Tentukan bidang header di ALB untuk merekam alamat IP asal klien.

    Sebagai contoh, jika arsitektur Anda adalah Client > GA > Server Load Balancer > ECS, Anda dapat menggunakan aksi Insert Header dalam aturan penerusan pendengar ALB untuk merekam alamat IP asal klien. Sebagai contoh, atur kunci menjadi client-real-ip dan nilainya menjadi Alamat IP Klien, yang merupakan variabel sistem yang ditentukan. Pada saat yang sama, aktifkan saklar Find Real Client Source IP, tambahkan alamat IP publik titik akhir GA ke daftar IP tepercaya ALB, dan konfigurasikan variabel log di server backend Nginx sebagai $http_client_real_ip. Alamat IP yang direkam dalam log adalah alamat IP asal klien.

    Menulis header

Anda juga dapat menggunakan metode lain untuk meningkatkan keamanan sistem, seperti:

  • Validasi dan filter header X-Forwarded-For: Di server backend, validasi dan filter header X-Forwarded-For untuk memastikan bahwa itu sah dan tepercaya. Anda dapat memeriksa format dan alamat IP dalam header X-Forwarded-For serta menolak nilai ilegal atau mencurigakan.

  • Gunakan firewall dan daftar kontrol akses (ACL): Terapkan firewall dan ACL antara load balancer dan server backend untuk menyaring permintaan jahat yang dapat memanipulasi header X-Forwarded-For.

  • Gunakan enkripsi SSL/TLS: Gunakan enkripsi SSL/TLS untuk melindungi komunikasi, termasuk transmisi header X-Forwarded-For. Ini mengurangi risiko serangan man-in-the-middle (MITM) dan manipulasi data.

Bagaimana cara memperoleh alamat IP asal klien saat menggunakan ALB dalam skenario ACK?

Untuk memperoleh alamat IP klien saat menggunakan ALB dalam kluster ACK, lihat Memperoleh alamat IP pengunjung.

Referensi

Berbagai jenis penyeimbang beban menggunakan metode berbeda untuk mendapatkan alamat IP asal Klien: