Assalamu'alaikum wr.wb
Pada kali ini ane ingin share cara mengkonfigurasi nginx sebagai reverse proxy. Jadi disini tidak menggunakan aplikasi pihak ketiga, kita akan menggunakan module dari nginx, yaitu ngx_http_proxy_module.
Pada topologi diatas, saya punya 2 server. Yang satu sebagai controller, dan yang satu sebagai node. Jadi node disana berguna untuk menangani request client dan memberikannya kepada controller untuk ditampilkan ke client. Istilah ini dinamakan backend (kerjanya si node) dan frontend (kerjanya controller untuk klien). Jadi controller berguna sebagai yang mengontrol webserver. Pada saat klien membuka sebuah webserver, maka dia mengakses controller, sedangkan node adalah yang bekerja dan memberikan hasil request dari klien. Analoginya seperti ini. Controller ini adalah seorang pramu saji, yaitu dia yang menangani pesanan dan mengantarkan makanan ke pembeli. Dan node adalah seorang koki yang memasak makanan untuk pembeli.
Sesuai topologi diatas, saya memiliki satu server backend, yaitu node1 sebagai webserver. Jadi jika client merequest halaman website pada controller, sebenarnya kontennya itu tidak ada pada controller, tapi ada pada node. Jadi controller meneruskan request klien ke node1 dan meneruskan konten website sebagai hasil dari request ke klien.
Reverse Proxy adalah sebuah proxy yang berada didepan web server yang digunakan untuk mengcache dan bisa juga sebagai loadbalancer. Cara kerjanya adalah, ketika klien merequest halaman web ke server reverse proxy atau saya sebut diatas sebagai controller, maka klien seolah olah mengakses webserver yang berada di IP Private atau LAN, seperti forwarded path.
Pada lab ini, semua konten website hanya ada pada node, pada controller tidak ada konten web apapun. Controller hanya mengarahkan saja.
Pastikan semua cluster (controller dan node) sudah diinstall nginx
Disini saya memiliki controller yang punya 2 IP, IP privat dan IP Publik. IP Private di ether1 dan IP Publik di ether 0.
1. Buat file konfigurasi baru untuk reverse proxy pada /etc/nginx/conf.d/ didalam controller node. Untuk namanya bebas tapi harus berakhiran .conf, disini saya menamakannya proxy_pass.conf
2. Masukkan konfigurasi seperti ini
Pada konfigurasi diatas, saya membuat server block, untuk web www.alhudsf.com. Block ini untuk membuat website pada server.
listen 80 berguna untuk mengatur siapa saja yang dapat dipenuhi requestnya oleh klien. Pada option listen ini bisa dimasukkan ipaddress klien beserta port, atau port saja juga bisa. Kalau yang diisi portnya saja, seperti saya disini hanya mengisi 80 saja, itu artinya, server dapat memenuhi request dari semua ip yang mengakses port 80 (http) pada server.
server_name untuk mendefinisikan nama server, disini sayamendefinisikan www.alhudsf.com
proxy_redirect off berguna agar controller tidak melakukan redirect pada suatu konten website.
proxy_set_header berguna untuk mengizinkan mendefinisikan ulang atau menambahkan bidang ke header permintaan yang dikirimkan ke server proxy.
proxy_set_header X-Real-IP $remote_addr berguna untuk mengatur alamat IP dari klien sehingga proxy dengan benar dapat membuat keputusan atau masuk berdasarkan informasi ini. Variabel $remote_addr merupakan IP client yang mengakses server.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for maksudnya adalah Header X-Forwarded-For adalah daftar yang berisi alamat IP dari setiap server yang telah diprogramkan klien sampai saat ini. Pada contoh di atas, kami menetapkan variabel $ proxy_add_x_forwarded_for ini. Variabel ini mengambil nilai dari header X-Forwarded-For asli yang diambil dari klien dan menambahkan alamat IP server Nginx sampai akhir.
proxy_set_header Host $http_host Permintaan di atas menetapkan header "Host" ke variabel $http_host, yang berisi informasi tentang host asli yang diminta
proxy_pass_header node1 berguna untuk mengizinkan lewat header yang dinonaktifkan dari server proxy ke client.
location / berguna untuk mengatur halaman website. Garis miring (/) menandakan direktori root. Jadi / itu menandakan halaman utama web (index) dan subdirektori didalamnya diikuti dengan nama direktori tersebut.
proxy_pass http://node1.alhudsf.com/ Menetapkan protokol dan tujuan akan diarahkan request dari klien. disini saya mengaturnya kalau klien mengakses server controller, maka controller akan meneruskan request tersebut ke http://node1.alhudsf.com/
3. Restart service nginx
4. Buat Konten web pada node1
Saya membuatnya seperti ini, anda bisa membuatnya sesuai keinginan anda
5. Aktifkan dan jalankan service nginx pada node1
6. Buka firewall agar mengizinkan service http pada node1, kemudian reload
7. Buka web anda pada klien
Terlihat pada gambar diatas, pada saat kita mengakses webserver yang merupakan IP publik, tapi yang muncul konten yang berasal dari node yang berada dalam private network
Sekian Semoga Bermanfaat
loading...
Comments
Post a Comment