Apache HTTP Server dapat dikonfigurasi sebagai reverse proxy untuk menangani dekripsi lalu lintas HTTPS (SSL Termination) di sisi server depan, lalu meneruskannya sebagai lalu lintas HTTP biasa (plaintext) ke server backend di jaringan internal. Konfigurasi ini memerlukan modul inti Apache seperti mod_proxy, mod_proxy_http, dan mod_ssl.
Persiapan Modul dan Prasyarat
Sebelum menyusun blok VirtualHost, pastikan modul-modul yang dibutuhkan telah diaktifkan pada sistem operasi berbasis Debian/Ubuntu menggunakan perintah a2enmod:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
sudo systemctl restart apache2
Tabel Parameter Direktif Utama SSL Termination
| Direktif Apache | Modul Terkait | Fungsi Utama |
|---|---|---|
| SSLEngine | mod_ssl | Mengaktifkan atau menonaktifkan mesin enkripsi SSL/TLS pada VirtualHost. |
| SSLCertificateFile | mod_ssl | Menentukan jalur file sertifikat publik (.crt / .pem). |
| SSLCertificateKeyFile | mod_ssl | Menentukan jalur file kunci privat (private key) untuk dekripsi. |
| ProxyPass | mod_proxy | Memetakan URL jarak jauh ke server URL lokal atau backend. |
| ProxyPassReverse | mod_proxy | Menyesuaikan header HTTP 'Location' pada respons dari server backend. |
Contoh Konfigurasi VirtualHost SSL Termination
Berikut adalah contoh blok konfigurasi lengkap untuk menangani port 443 di sisi publik dan meneruskannya ke aplikasi internal pada port 8080:
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
SSLCertificateChainFile /etc/ssl/certs/chain.crt
# Protokol TLS yang diizinkan (nonaktifkan SSLv3, TLS 1.0, TLS 1.1)
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
# Konfigurasi Reverse Proxy
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
# Meneruskan informasi klien asli ke backend
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Langkah Penerapan dan Pengujian
- Simpan berkas konfigurasi di direktori
/etc/apache2/sites-available/example.com.conf. - Uji sintaks konfigurasi menggunakan perintah
sudo apache2ctl configtestuntuk memastikan tidak ada kesalahan pengetikan. - Aktifkan situs dengan perintah
sudo a2ensite example.com.conf. - Muat ulang layanan Apache menggunakan
sudo systemctl reload apache2.
Troubleshooting Umum
Jika aplikasi backend mendeteksi perulangan pengalihan (infinite redirect loop), pastikan aplikasi backend dikonfigurasi untuk mengenali header X-Forwarded-Proto: https yang dikirimkan oleh Apache. Tanpa header ini, aplikasi backend mungkin mengira permintaan awal datang melalui HTTP biasa lalu memerintahkan browser untuk beralih ke HTTPS secara terus-menerus.