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:
- Aktifkan konfigurasi situs:
sudo a2ensite namadomain.com.conf - Uji sintaks konfigurasi untuk menghindari galat:
sudo apache2ctl configtest - 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.