Apache adalah server web serbaguna yang menawarkan fitur pendukung yang lengkap, beberapa di antaranya melalui ekstensi. Pada artikel ini, kita akan menggunakan mod_proxy modul untuk mengkonfigurasi Apache dalam peran proxy terbalik.
Meskipun Apache mungkin bukan pilihan pertama Anda sebagai proxy terbalik, dengan alternatif yang lebih modern seperti NGINX cenderung mencuri perhatian, mod_proxy berguna untuk server yang sudah menjalankan Apache dan sekarang perlu merutekan lalu lintas ke layanan lain. Anda dapat mengatur host virtual Apache untuk meneruskan permintaan domain tertentu ke server web terpisah.
Kami menggunakan Apache 2.4 dengan sistem berbasis Debian untuk tujuan panduan ini. Kami juga akan menganggap bahwa server yang Anda inginkan untuk menjadi proxy lalu lintas sudah dapat diakses di jaringan dari host Apache Anda. Artikel ini berfokus pada mengaktifkan proxy berdasarkan host virtual yang unik tetapi mod_proxy juga dikonfigurasi secara global, sebagai bagian dari konfigurasi server Apache Anda, atau di tingkat direktori melalui .htaccess file.
Aktifkan Modul Proksi
mod_proxy disertakan dalam instalasi Apache default. Menggunakan a2enmod untuk mengaktifkan modul dan komponen HTTP independennya sekarang:
sudo a2enmod proxy sudo a2enmod proxy_http
Ini mengkonfigurasi Apache untuk mendukung koneksi HTTP proxy ke host lain. Modul dikonfigurasi dengan Proxy– instruksi awalan di file konfigurasi Apache Anda. Kami akan mengaturnya selanjutnya.
Menyiapkan Host Virtual Proksi
Mari kita siapkan host virtual penerusan example.com ke alamat IP internal 192.168.0.1. Anda harus menambahkan catatan DNS untuk example.com yang menunjuk ke host Apache Anda.
Proxy dalam skenario ini memungkinkan pengunjung mengakses server web internal Anda secara transparan melalui alamat eksternal. Apache bertindak sebagai penjaga gerbang yang mengarahkan lalu lintas ke tujuan akhirnya. Pengguna dapat melihat example.commeskipun Apache sebenarnya menyelesaikan permintaan melalui server terpisah.
Tambahkan file host virtual baru di dalamnya /etc/apache2/sites-available dengan isi sebagai berikut:
<VirtualHost *:80>
ServerName example.com
ProxyPass / nocanon
ProxyPassReverse /
</VirtualHost>
Itu ProxyPass dan ProxyPassReverse arahan menentukan lalu lintas ke example.com harus diproksi ke 192.168.0.1. opsional nocanon kata kunci menginstruksikan Apache untuk meneruskan URL mentah ke server jauh. Tanpa kata kunci ini, Apache akan secara otomatis mengkanonikalisasi URL, yang mungkin tidak kompatibel dengan beberapa server dan kerangka kerja. Menggunakan nocanon kompatibilitas dijamin tetapi dapat mempengaruhi postur keamanan Anda karena menonaktifkan perlindungan bawaan Apache terhadap serangan proxy berbasis URL.
ProxyPassReverse harus disediakan untuk mengidentifikasi konfigurasi Anda sebagai pengaturan proxy terbalik. Apache akan menggunakan URL yang disediakan untuk menulis ulang Location, Content-Locationdan URI header respons yang disediakan oleh backend Anda. Ini memastikan bahwa permintaan berikutnya akan terus mengenai proxy terbalik, alih-alih mencoba menjangkau server internal secara langsung.
Konfigurasi ini akan mem-proxy semua permintaan. Anda dapat membatasi proxy ke jalur tertentu seperti /media dengan menyesuaikan ProxyPass dan ProxyPassReverse instruksi:
ProxyPass /media ProxyPassReverse /media
Menambahkan banyak ProxyPass Aturan memungkinkan Anda merutekan permintaan di antara beberapa target menggunakan host virtual. Aturan dicocokkan dalam urutan mereka ditulis. Jika Anda membutuhkan perilaku perutean yang lebih kompleks, gunakan ProxyPassMatch direktif sebagai gantinya. Ini setara dengan ProxyPass tetapi mencocokkan URL yang masuk dengan ekspresi reguler:
ProxyPassMatch ^/client/(.*)/images$
Simpan file host virtual Anda dan jalankan dengan a2ensite memesan Ini mengambil nama dasar file Anda, yang terkait dengan sites-available direktori:
sudo a2ensite example-proxy-vhost
Mulai ulang Apache untuk menerapkan perubahan Anda:
sudo service apache2 restart
Proxy sederhana Anda sekarang harus beroperasi. Coba kunjungi example.com – Anda akan melihat konten yang dikirimkan oleh 192.168.0.1. Permintaan akan berakhir di host Apache Anda yang kemudian akan mem-proxy-nya ke server internal Anda.
Menggunakan SSL
Contoh di atas menghapus SSL. Dalam beban kerja produksi, Anda dapat menyiapkannya dengan menambahkan SSLCertificateFile dan SSLCertificateKeyFile pengaturan pada host virtual Anda. Mereka menentukan sertifikat SSL dan kunci untuk digunakan saat mengautentikasi koneksi SSL. Anda juga dapat menggunakan certbot Let’s Encrypt untuk mengotomatiskan pengaturan.
Mengonfigurasi SSL dengan cara ini berarti koneksi aman diakhiri dengan host Apache Anda. Koneksi antara Apache dan target proxy Anda akan dibuat melalui HTTP biasa.
Jika Anda perlu mengamankan koneksi proxy juga, Anda harus menggunakan SSLProxy pilihan yang disediakan oleh mod_ssl. SSLProxyEngine = On akan berfungsi sebagai konfigurasi paling dasar, selama Apache dan server target proxy Anda memiliki akses ke sertifikat yang sama. Opsi ini menginstruksikan informasi SSL untuk diberikan pada koneksi proksi.
Opsi Proksi
Proksi balik Apache memiliki beberapa arahan opsional yang dapat Anda gunakan untuk mengonfigurasi perilaku penerusan. Berikut adalah beberapa opsi yang umum digunakan:
ProxyAddHeaders– Apache lulusX-Forwarded-Host,XForwarded-FordanX-Forwarded-Serverheader di server backend Anda secara default. Ini memungkinkan backend Anda untuk mendeteksi bahwa permintaan telah diproksi melalui Apache. Setel tajuk ini keOffmencegah Apache menambahkan header ini.ProxyErrorOverride– Apache tidak akan mengganggu respons yang dikirim oleh server backend Anda kecuali diinstruksikan. Jika backend Anda menyajikan kode kesalahan 400, 404, 500, atau lainnya, pengguna akan tetap menerima konten itu. PengaturanProxyErrorOverridemengubahnya, membiarkan Apache mengganti konten halaman kesalahan dengan yang dikonfigurasiErrorDocumentalih-alih. Ini dapat diinginkan dalam situasi di mana Anda ingin kesalahan dari semua backend Anda ditangani secara merata dengan konfigurasi yang dipusatkan pada host proxy.ProxyPassReverseCookieDomain– Ini bekerja seperti dipaksa (untuk reverse proxy)ProxyPassReversepengarahan. Ini akan menulis ulang domain menjadiSet-Cookieheader untuk mereferensikan nama host virtual, bukan nama host server backend tempat asalnya.ProxyPreserveHost– Apache biasanya mengirimkan nama hostnya sendiri ke server backend Anda sebagai nilaiHostkepala. Mengatur direktif ini berarti asliHostheader akan dikirim sebagai gantinya. Ini mungkin diperlukan ketika perangkat lunak backend Anda melakukan perutean berbasis nama hostnya sendiri.ProxyTimeout– Gunakan arahan ini untuk mengonfigurasi waktu Apache akan menunggu saat server backend Anda memproses permintaan proksi. Apache akan membatalkan permintaan dan mengembalikan kode kesalahan ke klien jika batas waktu terlampaui. Ini default ke tingkat serverTimeoutnilai.
Anda dapat mengatur arahan ini sebagai baris tambahan di file host virtual Anda. Ingatlah untuk me-restart layanan Apache setiap kali Anda menerapkan perubahan.
Penyeimbang beban
Implementasi proxy terbalik Apache juga mendukung penyeimbangan beban antara banyak backend yang berbeda. Ini memungkinkan permintaan untuk example.com tekan salah satu server di kolam seimbang Anda.
<Proxy balancer://example-balancer>
BalancerMember
BalancerMember
ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass / balancer://example-balancer
ProxyPassReverse / balancer://example-balancer
Contoh ini meminta rute ke salah satu dari dua server di example-balancer kolam. Algoritma load balancing didefinisikan oleh lbmethod pengaturan; Itu bytraffic nilai yang digunakan di sini mencoba memastikan bahwa setiap server menangani jumlah lalu lintas yang sama.
Alternatifnya byrequests balancing method adalah versi bytraffic yang lebih sederhana yang memberikan setiap backend bagian yang sama dari permintaan masuk. Itu bybusyness balancer memantau berapa banyak permintaan yang dilayani setiap backend, lalu menetapkan yang baru ke backend yang paling tidak “sibuk”.
Ringkasan
Itu mod_proxy modul dapat mengubah Apache menjadi host proxy terbalik yang memungkinkan Anda menggunakan perutean berbasis nama untuk mengakses beberapa layanan independen. Anda juga dapat menambahkan penyeimbangan beban untuk memastikan stabilitas dan waktu aktif dengan mendistribusikan permintaan ke seluruh armada server Anda.
Rasa proxy lainnya juga tersedia. Anda dapat mem-proxy koneksi FTP, WebSocket, dan HTTP2, antara lain, dengan menginstal add-on tambahan di samping mod_proxy. Daftar lengkap modul tersedia di dokumen Apache.

