Konfigurasi VirtualHost Proxy Pass Reverse di Apache

Konfigurasi VirtualHost dengan ProxyPass dan ProxyPassReverse pada Apache HTTP Server digunakan untuk meneruskan (forward) permintaan dari server web utama ke server backend (seperti Node.js, Python, atau container Docker) serta memetakan ulang header HTTP pada respons. Pendekatan ini memungkinkan Apache bertindak sebagai reverse proxy yang menangani SSL/TLS dan perutean lalu lintas domain.

Untuk menerapkan teknik ini secara benar tanpa kendala pengalihan URL (redirect loop) atau masalah header host yang hilang, berikut adalah blok konfigurasi standar yang siap diterapkan pada server produksi berbasis sistem operasi Linux (Ubuntu/Debian/CentOS).

Prasyarat Modul Apache

Sebelum mendefinisikan VirtualHost, pastikan modul proxy yang diperlukan sudah aktif pada server Apache Anda. Jalankan perintah berikut di terminal:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo systemctl restart apache2

Contoh Konfigurasi VirtualHost Proxy Pass Reverse

Simpan berkas konfigurasi di direktori /etc/apache2/sites-available/namadomain.com.conf (untuk Ubuntu/Debian). Pastikan Anda menyesuaikan alamat IP backend, port, serta nama domain sesuai kebutuhan lingkungan Anda.

<VirtualHost *:80>
    ServerName namadomain.com
    ServerAlias www.namadomain.com

    # Arahkan semua HTTP ke HTTPS
    Redirect permanent / https://namadomain.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName namadomain.com
    ServerAlias www.namadomain.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/namadomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/namadomain.com/privkey.pem

    # Pengaturan Log
    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined

    # Konfigurasi Proxy Utama
    ProxyPreserveHost On
    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    # Aturan Proxy Pass dan Reverse
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/

    # Meneruskan Header Klien yang Penting
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"
</VirtualHost>

Penjelasan Parameter Konfigurasi

Setiap baris direktif dalam blok konfigurasi di atas memiliki peran krusial dalam menjaga stabilitas dan keamanan komunikasi antara klien dan server backend:

Direktif / Parameter Fungsi Utama
ProxyPreserveHost On Memastikan header Host dari permintaan asli klien (domain.com) diteruskan ke server backend alih-alih diubah menjadi alamat IP lokal (127.0.0.1).
ProxyRequests Off Menonaktifkan fungsi forward proxy murni untuk mencegah server Anda disalahgunakan sebagai open proxy oleh pihak luar.
ProxyPass Memetakan URL jarak jauh ke ruang server lokal atau server backend eksternal (dalam contoh ini port 3000).
ProxyPassReverse Menginstruksikan Apache untuk mengubah header Location pada respons HTTP dari backend agar sesuai dengan URL proxy publik.
RequestHeader set X-Forwarded-Proto Memberitahu aplikasi backend bahwa koneksi asli dari pengguna menggunakan protokol HTTPS.

Langkah Penerapan dan Pengujian

Setelah berkas konfigurasi tersimpan, aktifkan situs dan muat ulang layanan Apache dengan tahapan berikut:

  1. Aktifkan konfigurasi situs: sudo a2ensite namadomain.com.conf
  2. Uji sintaks konfigurasi untuk menghindari galat: sudo apache2ctl configtest
  3. Muat ulang layanan Apache: sudo systemctl reload apache2

Troubleshooting Masalah Umum

Kendala yang sering muncul pada konfigurasi reverse proxy adalah terjadinya Infinite Redirect Loop atau aset statis yang gagal dimuat. Pastikan aplikasi di backend tidak memaksa pengalihan HTTPS secara mandiri jika Apache sudah menangani SSL termination di depan. Selain itu, periksa izin akses firewall jika server backend berada di mesin yang berbeda dari server Apache.