Konfigurasi Dasar Apache Reverse Proxy
Apache HTTP Server berfungsi sebagai reverse proxy dengan meneruskan permintaan klien ke server backend (seperti Node.js, Python, atau server internal lainnya) dan mengembalikan respons ke klien. Inti dari konfigurasi ini terletak pada aktivasi modul mod_proxy dan mod_proxy_http.
Langkah Aktivasi Modul
Sebelum melakukan konfigurasi VirtualHost, pastikan modul yang diperlukan telah aktif pada sistem operasi berbasis Debian/Ubuntu:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl restart apache2Sintaks VirtualHost untuk Reverse Proxy
Berikut adalah konfigurasi standar dalam file VirtualHost (biasanya di /etc/apache2/sites-available/domain-anda.conf) untuk meneruskan trafik ke aplikasi backend yang berjalan di port 3000:
<VirtualHost *:80>
ServerName domainanda.com
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ErrorLog ${APACHE_LOG_DIR}/proxy-error.log
CustomLog ${APACHE_LOG_DIR}/proxy-access.log combined
</VirtualHost>Tabel Parameter Konfigurasi Utama
| Direktif | Fungsi |
|---|---|
| ProxyPreserveHost | Meneruskan header Host asli dari klien ke server backend. |
| ProxyPass | Menentukan pemetaan URL lokal ke server backend. |
| ProxyPassReverse | Menyesuaikan header respons agar URL backend tidak bocor ke klien. |
| ProxyRequests | Harus diset 'Off' untuk mencegah server menjadi open proxy. |
Panduan Troubleshooting Lapangan
Jika Anda menemui kendala saat implementasi, periksa poin-poin berikut:
- Error 503 Service Unavailable: Pastikan aplikasi backend Anda sudah berjalan dan mendengarkan pada port yang ditentukan.
- Izin Akses (SELinux/AppArmor): Pada sistem seperti CentOS atau RHEL, SELinux sering memblokir koneksi jaringan keluar dari Apache. Gunakan perintah
setsebool -P httpd_can_network_connect 1untuk mengizinkannya. - Header Host: Jika aplikasi backend Anda menggunakan virtual hosting berbasis nama, pastikan
ProxyPreserveHost Ontelah diaktifkan agar backend mengenali domain yang diminta. - Timeout: Jika backend membutuhkan waktu lama untuk merespons, tambahkan parameter
timeout=60pada direktifProxyPass.
Selalu lakukan pengecekan sintaks dengan perintah apachectl configtest sebelum melakukan systemctl restart apache2 untuk menghindari downtime akibat kesalahan penulisan konfigurasi.