Konfigurasi Apache Reverse Proxy: Panduan Teknis & Implementasi

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 apache2

Sintaks 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

DirektifFungsi
ProxyPreserveHostMeneruskan header Host asli dari klien ke server backend.
ProxyPassMenentukan pemetaan URL lokal ke server backend.
ProxyPassReverseMenyesuaikan header respons agar URL backend tidak bocor ke klien.
ProxyRequestsHarus 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 1 untuk mengizinkannya.
  • Header Host: Jika aplikasi backend Anda menggunakan virtual hosting berbasis nama, pastikan ProxyPreserveHost On telah diaktifkan agar backend mengenali domain yang diminta.
  • Timeout: Jika backend membutuhkan waktu lama untuk merespons, tambahkan parameter timeout=60 pada direktif ProxyPass.

Selalu lakukan pengecekan sintaks dengan perintah apachectl configtest sebelum melakukan systemctl restart apache2 untuk menghindari downtime akibat kesalahan penulisan konfigurasi.