Nginx Reverse Proxy dan Apache mod_remoteip untuk Menampilkan IP Asli Client

Nginx Reverse Proxy dan Apache mod_remoteip untuk Menampilkan IP Asli Client

Pengantar

Menggunakan Nginx sebagai reverse proxy di depan Apache adalah konfigurasi yang umum di server VPS, terutama untuk WordPress. Nginx biasanya menangani SSL, trafik besar, dan keamanan dasar, sementara Apache fokus menjalankan PHP dan aplikasi.

Masalah yang sering muncul: Apache tidak mengetahui IP asli pengunjung. Semua request terlihat berasal dari 127.0.0.1 (IP lokal Nginx), sehingga log Apache tidak akurat dan fitur keamanan WordPress bisa salah membaca aktivitas user.

Artikel ini membahas cara menampilkan IP asli client dengan aman menggunakan mod_remoteip di Apache.

Apa Itu Nginx Reverse Proxy?

Nginx reverse proxy adalah arsitektur di mana Nginx menerima request dari client, lalu meneruskannya ke server backend seperti Apache.

Secara sederhana, alurnya seperti ini:

Client → Nginx → Apache → PHP

Keuntungan:

  • Nginx lebih cepat menangani static file.
  • Apache fokus pada PHP dan aplikasi.
  • SSL terminasi lebih mudah dikelola di Nginx.

Kenapa IP Client Asli Bisa Hilang?

Apache hanya mengetahui IP dari koneksi langsung ke server. Karena request datang dari Nginx, REMOTE_ADDR akan menjadi IP Nginx (127.0.0.1) atau IP internal.

Dampaknya:

  • Log Apache tidak valid.
  • $_SERVER['REMOTE_ADDR'] selalu IP Nginx.
  • Rate limit berbasis IP gagal.
  • Plugin keamanan WordPress salah membaca aktivitas user.

Header X-Forwarded-For dan X-Real-IP

Untuk mengatasi masalah ini, reverse proxy menggunakan HTTP header tambahan.
Dua header paling penting adalah:

  • X-Forwarded-For
    Berisi IP client asli, bisa berisi banyak IP jika melewati banyak proxy.
  • X-Real-IP
    Biasanya berisi satu IP client utama.

Pada konfigurasi nginx reverse proxy, header ini dikirim ke backend Apache agar informasi IP tetap ikut terbawa. Tanpa header ini, Apache tidak punya cara mengetahui IP client sebenarnya.

Mengenal Apache mod_remoteip

Apache mod_remoteip adalah modul resmi Apache untuk menangani IP client di balik proxy.
Fungsi utamanya:

  • Membaca header X-Forwarded-For
  • Mengganti nilai REMOTE_ADDR
  • Mengubah IP yang muncul di access log
  • Menyediakan IP asli ke PHP dan WordPress

Dengan mod_remoteip, Apache akan mempercayai Nginx sebagai proxy dan menggunakan IP client yang dikirimkan lewat header.

Konfigurasi Nginx Reverse Proxy

Berikut contoh konfigurasi Nginx sebagai reverse proxy ke Apache backend:

Penjelasan singkat:

    • proxy_pass meneruskan request ke Apache
    • X-Forwarded-For membawa IP client
    • X-Forwarded-Proto memastikan WordPress mengenali HTTPS

Mengaktifkan mod_remoteip di Apache

    1. Mengaktifkan Modul mod_remoteip
      Apache menyediakan modul resmi bernama mod_remoteip untuk menangani kasus reverse proxy.
      • Aktifkan modul
        Jalankan perintah berikut di server:
        a2enmod remoteip
        
      • Setelah itu, restart Apache agar modul aktif:

        systemctl reload apache2
        
      • Pastikan Modul Active
        apachectl -M | grep remoteip
        
        Output :
        AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
         remoteip_module (shared)
        Catatan : Jika muncul remoteip_module, berarti modul sudah aktif
    2. Membuat Konfigurasi mod_remoteip
      • Konfigurasi ini diletakkan di file
        nano  /etc/apache2/conf-available/remoteip.conf
        
      • Isi konfigurasi
        RemoteIPHeader X-Forwarded-For
        RemoteIPTrustedProxy 127.0.0.1
        

        Penjelasan:

        • RemoteIPHeader → header yang membawa IP client
        • RemoteIPTrustedProxy → IP proxy yang dipercaya (Apache)

      • Reload Apache 
        systemctl reload apache2

Mengubah Format Log Apache

Agar log Apache menampilkan IP asli, gunakan format %a.
Contoh konfigurasi VirtualHost Apache backend:

Cara Mengecek IP Asli Client

  1. Cek melalui log Apache
    tail -f /var/log/apache2/wordpress-access.log
    

    Output :

    203.0.113.25 - - [08/Jan/2026:07:24:41 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 47 "https://example-site.com/wp-admin/edit.php?post_type=post" "Mozilla/5.0 ..."
    198.51.100.42 - - [08/Jan/2026:07:24:48 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 47 "https://example-site.com/wp-admin/plugins.php" "Mozilla/5.0 ..."
    192.0.2.10 - - [08/Jan/2026:07:25:44 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 98 "https://example-site.com/wp-admin/post.php?post=ID&action=edit" "Mozilla/5.0 ..."
    203.0.113.99 - - [08/Jan/2026:07:26:49 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 47 "https://example-site.com/wp-admin/plugins.php" "Mozilla/5.0 ..."
    
    Catatan : Jika konfigurasi benar, IP yang muncul adalah IP publik pengunjung, bukan 127.0.0.1.

     

Kesimpulan

Menggunakan Nginx sebagai reverse proxy di depan Apache memang memberikan performa dan keamanan yang lebih baik, namun tanpa konfigurasi tambahan IP client asli tidak akan terbaca dengan benar. Dengan meneruskan header IP dari Nginx dan mengaktifkan Apache mod_remoteip, IP asli pengunjung dapat ditampilkan secara akurat di log Apache, PHP, dan WordPress. Konfigurasi ini membuat sistem keamanan, rate limit, dan audit log bekerja normal kembali tanpa perlu pengaturan rumit di Nginx, asalkan proxy yang dipercaya dibatasi dengan benar dan Apache tidak diekspos langsung ke publik.


Artikel Lain

WhatsApp Kami

Support : +6282138153600

Admin Finance : +6285191239466