Bagaimana Menggunakan Apache sebagai Proxy Reverse dengan mod_proxy di Ubuntu 16.04

Blog image

Proxy reverse adalah jenis server proxy yang membutuhkan permintaan HTTP (S) dan mendistribusikannya secara transparan ke satu atau beberapa server backend. Proxy reverse berguna karena banyak aplikasi web modern memproses permintaan HTTP masuk menggunakan server aplikasi backend yang tidak dimaksudkan untuk diakses oleh pengguna secara langsung dan sering hanya mendukung fitur HTTP yang belum sempurna.

Anda dapat menggunakan reverse proxy untuk mencegah server aplikasi yang mendasarinya agar tidak diakses secara langsung. Mereka juga dapat digunakan untuk mendistribusikan muatan dari permintaan yang masuk ke beberapa server aplikasi yang berbeda, meningkatkan kinerja pada skala dan memberikan keamanan. Mereka dapat mengisi kekosongan dengan fitur yang tidak diberikan server aplikasi, seperti enkripsi caching, kompresi, atau SSL juga.

Dalam tutorial ini, Anda akan mengatur Apache sebagai reverse proxy dasar menggunakan ekstensi mod_proxy untuk mengalihkan koneksi masuk ke satu atau beberapa server backend yang berjalan pada jaringan yang sama. Tutorial ini menggunakan backend sederhana yang ditulis dengan framework Flask web, namun Anda bisa menggunakan server backend yang Anda inginkan.

Langkah 1 – Mengaktifkan Modul Apache yang Diperlukan

Apache memiliki banyak modul yang tersedia tetapi tidak diaktifkan dalam instalasi baru. Pertama, kita harus mengaktifkan yang akan kita gunakan dalam tutorial ini.

Modul yang kita butuhkan adalah mod_proxy itu sendiri dan beberapa modul add-on-nya, yang memperluas fungsinya untuk mendukung protokol jaringan yang berbeda. Secara khusus, kita akan menggunakan:

mod_proxy, Modul proxy utama Apache untuk mengalihkan koneksi. Hal ini memungkinkan Apache untuk bertindak sebagai gateway ke server aplikasi yang mendasarinya.mod_proxy_http, Yang menambahkan dukungan untuk proxy HTTP koneksi.mod_proxy_balancer and mod_lbmethod_byrequests, Yang menambahkan fitur load balancing untuk beberapa server backend.

Untuk mengaktifkan keempat modul ini, jalankan perintah berikut secara berturut-turut.

$ sudo a2enmod proxy

$ sudo a2enmod proxy_http

$ sudo a2enmod proxy_balancer

$ sudo a2enmod lbmethod_byrequests

Agar perubahan ini berlaku, restart Apache.

$ sudo systemctl restart apache2

Apache sekarang siap bertindak sebagai reverse proxy untuk permintaan HTTP. Pada langkah berikutnya (opsional), kita akan membuat dua server backend yang sangat mendasar. Ini akan membantu kami memverifikasi apakah konfigurasi bekerja dengan benar, namun jika Anda sudah memiliki aplikasi backend Anda sendiri, Anda dapat beralih ke Langkah 3.

Langkah 2 – Membuat Server Uji Backend

Menjalankan beberapa server backend sederhana adalah cara mudah untuk menguji apakah konfigurasi Apache Anda bekerja dengan benar. Di sini, kita akan membuat dua server uji yang merespons permintaan HTTP dengan mencetak teks. Satu server akan mengatakan Hello world! Dan yang lain akan mengatakan Howdy world !.

Catatan: Dalam pembuatan non-tes, server backend biasanya mengembalikan jenis konten yang sama. Namun, untuk pengujian ini secara khusus, setelah dua server mengembalikan pesan yang berbeda, mudah untuk memeriksa mekanisme load balancing yang menggunakan keduanya.

Flask adalah microframework Python untuk membangun aplikasi web. Kami menggunakan ini untuk membuat server uji karena aplikasi dasar hanya memerlukan beberapa baris kode. Anda tidak perlu tahu Python untuk mengaturnya, tapi jika Anda ingin belajar, Anda bisa melihat tutorial Python.

Update daftar paket terlebih dahulu.

$ sudo apt-get update

Kemudian instal Pip, pengelola paket Python yang disarankan.

$ sudo apt-get -y install python3-pip

Gunakan Pip untuk memasang Flask.

$ sudo pip3 install flask

Setelah semua komponen yang dibutuhkan terinstal


1

, mulailah dengan membuat file baru yang berisi kode backend server pertama di direktori home pengguna saat ini.


 

Dua baris pertama menginisialisasi kerangka Flask. Ada satu fungsi, home (), yang mengembalikan garis teks (Hello world!). Baris @ app.route (‘/’) di atas definisi fungsi home () memberi tahu Flask untuk menggunakan nilai kembalian rumah () untuk menanggapi permintaan HTTP yang diarahkan pada / root URL aplikasi. nano ~/backend1.py

Server backend kedua persis sama dengan yang pertama, selain kembali ke baris teks yang berbeda, jadi mulailah dengan menduplikat file pertama.

$ cp ~/backend1.py ~/backend2.py

Buka file yang baru disalin.

$ nano ~/backend2.py

Ubah pesan yang akan dikembalikan dari dunia Halo! To Howdy world !, lalu simpan dan tutup filenya.


1


Use the following command to start the first background server on port 8080. This also redirects Flask’s output to /dev/null because it would cloud the console output further on.

$ FLASK_APP=~/backend1.py flask run –port=8080 >/dev/null 2>&1 &

Di sini, kita mendahului perintah FLASK  dengan menetapkan variabel lingkungan FLASK_APP pada baris yang sama. Variabel lingkungan adalah cara mudah untuk menyampaikan informasi ke dalam proses. Anda dapat mempelajari lebih lanjut tentang variabel lingkungan di Cara Membaca dan Mengatur Variabel Lingkungan dan Shell pada VPS Linux.

Dalam kasus ini, dengan menggunakan variabel lingkungan pastikan pengaturan hanya berlaku untuk perintah yang dijalankan dan tidak akan tetap tersedia setelahnya, karena kami akan mengirimkan nama file lain dengan cara yang sama untuk memberi tahu perintah labu untuk memulai server kedua.

Similarly, use this command to start the second server on port 8081. Note the different value for the FLASK_APP environment variable.

$ FLASK_APP=~/backend2.py flask run –port=8081 >/dev/null 2>&1 &

Anda bisa menguji dua server yang sedang berjalan menggunakan curl. Uji server pertama:

$ curl http://127.0.0.1:8080/

Ini akan menampilkan Hello world! Di terminal Uji server kedua:

$ curl http://127.0.0.1:8081/

Ini akan menampilkan Howdy world! sebagai gantinya.

Catatan: Untuk menutup kedua server uji setelah Anda tidak membutuhkannya lagi, seperti saat Anda menyelesaikan tutorial ini, Anda bisa langsung menjalankan flask

Pada langkah selanjutnya, kita akan memodifikasi file konfigurasi Apache agar bisa digunakan sebagai reverse proxy..

Catatan: Dalam tutorial ini, kami menerapkan konfigurasi di tingkat host virtual. Pada instalasi default Apache, hanya ada satu host virtual default diaktifkan. Namun, Anda bisa menggunakan semua fragmen konfigurasi tersebut di host maya lainnya juga. Untuk mempelajari lebih lanjut tentang virtual host di Apache, Anda bisa membaca How To Set Up Apache Virtual Hosts di Ubuntu 16.04 tutorial.

Jika server Apache Anda bertindak sebagai server HTTP dan HTTPS, konfigurasi proxy balik Anda harus ditempatkan di host virtual HTTP dan HTTPS. Untuk mempelajari lebih lanjut tentang SSL dengan Apache, Anda dapat membaca ini Cara Membuat Sertifikat SSL yang Ditandatangani Sendiri untuk Apache di tutorial Ubuntu 16.04.

Buka file konfigurasi Apache default menggunakan nano atau editor teks favorit Anda.

$ sudo nano /etc/apache2/sites-available/000-default.conf

Di dalam file itu, Anda akan menemukan blok <VirtualHost *: 80> mulai dari baris pertama. Contoh pertama di bawah ini menjelaskan cara mengonfigurasi blok ini untuk membalikkan proxy untuk satu server backend tunggal, dan yang kedua menyiapkan proxy reverse seimbang untuk beberapa server backend.

Contoh 1 – Reverse Proxying Server Single Backend

Ganti semua isi blok VirtualHost dengan yang berikut, jadi file konfigurasi anda terlihat seperti ini:

Jika Anda mengikuti bersama contoh server pada Langkah 2, gunakan 127.0.0.1:8080 seperti yang tertulis di blok di atas. Jika Anda memiliki server aplikasi Anda sendiri, gunakan alamat mereka sebagai gantinya.

Ada tiga arahan di sini:

ProxyPreserveHost membuat Apache melewati header Host asli ke server backend. Ini berguna, karena membuat server backend mengetahui alamat yang digunakan untuk mengakses aplikasi.ProxyPass adalah perintah konfigurasi utama proxy. Dalam kasus ini, ia menentukan bahwa segala sesuatu di bawah URL akar (/) harus dipetakan ke server backend di alamat yang diberikan. Misalnya, jika Apache mendapatkan permintaan untuk / contoh, ia akan terhubung ke http: // your_backend_server / example dan mengembalikan respons ke klien asli.·ProxyPassReverse seharusnya memiliki konfigurasi yang sama seperti ProxyPass. Ini memberitahu Apache untuk memodifikasi header respon dari server backend. Ini memastikan bahwa jika backend server mengembalikan header redirect lokasi, browser klien akan diarahkan ke alamat proxy dan bukan alamat server backend, yang tidak sesuai dengan yang diinginkan.

$ sudo systemctl restart apache2

Sekarang, jika Anda mengakses http://your_server_ip di browser web, Anda akan melihat respons server backend Anda daripada halaman selamat datang Apache standar. Jika Anda mengikuti Langkah 2, Ini berarti kamu akan melihat Hello world !.

Contoh 2 – Load Balancing di Beberapa Server Backend Jika

Anda memiliki beberapa server backend, cara yang baik untuk mendistribusikan lalu lintas di atasnya saat proxy menggunakan fitur load balancing dari mod_proxy.

Ganti semua isi dalam blok Virtual Host dengan yang berikut, jadi file konfigurasi Anda terlihat seperti ini:


4


Konfigurasinya mirip dengan yang sebelumnya, tapi bukannya menentukan server backend tunggal secara langsung, kami telah menggunakan blok Proxy tambahan untuk menentukan beberapa server. Blok ini diberi nama penyeimbang: // mycluster (namanya bisa dengan bebas diubah) dan terdiri dari satu atau lebih BalancerMembers, yang menentukan alamat server backend yang mendasarinya. ProxyPass dan ProxyPassReverse arahan menggunakan kolam penyeimbang beban bernama mycluster, bukan server tertentu.

Jika Anda mengikuti contoh server di Langkah 2, gunakan 127.0.0.1:8080 dan 127.0.0.1:8081 untuk perintah BalancerMember, seperti yang tertulis di blok di atas. Jika Anda memiliki server aplikasi Anda sendiri, gunakan alamat mereka sebagai gantinya.

Agar perubahan ini berlaku, restart Apache.

$ sudo systemctl restart apache2

Jika Anda mengakses http: // your_server_ip di browser web, Anda akan melihat tanggapan server backend Anda daripada halaman Apache standar. Jika mengikuti Langkah 2, menyegarkan halaman beberapa kali harus menampilkan Hello world! Dan Howdy world !, yang berarti reverse proxy bekerja dan load balancing antara kedua server.

Kesimpulan :

Anda sekarang tahu cara mengatur Apache sebagai proxy balik ke satu atau beberapa server aplikasi yang mendasarinya. Mod_proxy dapat digunakan secara efektif untuk mengkonfigurasi reverse proxy ke server aplikasi yang ditulis dalam array bahasa dan teknologi yang luas, seperti Python dan Django atau Ruby dan Ruby on Rails. Hal ini juga dapat digunakan untuk menyeimbangkan lalu lintas antara beberapa server backend untuk situs dengan banyak lalu lintas atau untuk menyediakan ketersediaan tinggi melalui beberapa server, atau untuk memberikan dukungan SSL yang aman ke server backend yang tidak mendukung SSL secara native.

Sementara mod_proxy dengan mod_proxy_http adalah kombinasi modul yang paling sering digunakan, ada beberapa protokol pendukung lain yang berbeda. Kami tidak menggunakannya di sini, namun beberapa modul populer lainnya meliputi:

Mod_proxy_ftp untuk FTP·Mod_proxy_connect untuk SSL tunneling.·Mod_proxy_ajp untuk AJP (Apache JServ Protocol), seperti backend berbasis Tomcat.·Mod_proxy_wstunnel untuk soket web.

Semoga membantu 😀