Membuat Front-End Webserver dengan Apache Reverse Proxy dan Mod_Rewrite

Apa itu front-end webserver? Jadi singkat cerita, kita memiliki sebuah (atau banyak) application server yang menangani banyak aplikasi. Banyak application server yang berjalan di port yang berbeda, misalnya Tomcat jalan di 8080, Weblogic jalan di 7001, lalu ada misalnya IIS untuk menjalankan teknologi .net framework.

Permasalahannya, ini menjadikan struktur URL-nya jadi jelek, misalnya http://server.example:7001, http://server.example:8001. Struktur URL yang cantik itu hanya bisa didapat jika web server berjalan mendengarkan di port 80. Lha, dari sekian banyak application server itu, siapa yang akan mendapatkan port kehormatan? Harus diundi terlebih dahulu?

Front-End dan Back-End Web Server

Solusi agar semua kebagian adalah membuat satu webserver yang mendengarkan port 80, yang berfungsi sebagai forwarder/dispatcher request, untuk meneruskannya ke application yang benar. Karena ada webserver yang ditaruh di depan sebagai forwarder dan webserver di belakang sebagai pemroses request, maka model seperti ini disebut front-end webserver dan back-end webserver. Seperti gambar di bawah ini kira-kira:

Webserver yang saya gunakan sebagai front-end adalah Apache. Dia mendapatkan port kehormatan 80 agar bisa diakses langsung dengan “normal” (http://server.example). Kemudian, berbagai web server dari berbagai platform hidup di belakangnya, misalnya Oracle Weblogic di port 7001 (http://server.example:7001), Apache Tomcat di port 8080 (http://server.example:8080), dan IBM Websphere di port 8888 (http://server.example:8888).

Yang saya inginkan adalah, semua client (Macintosh, Desktop PC, dan Laptop PC) mengakses semua application server melalui port 80 dengan nama-nama cantik berikut ini:

  • http://weblogic.example/wls, untuk aplikasi wls yang ada di Weblogic port 7001
  • http://tomcat.example/tomcat, untuk aplikasi tomcat yang ada di Tomcat port 8080
  • http://websphere.example/ws, untuk aplikasi ws yang ada di Websphere port 8888

Segala akses yang langsung ke application server tidak diperbolehkan (tapi di posting ini, saya tidak menyertakan setting firewall-nya ya!).

Jadi bagaimana setup-nya? Hal yang perlu dilakukan adalah: (1) Setup DNS record untuk mengarah ke webserver, (2) Setup Apache, Virtual Host, (3) Setup Apache, Reverse Proxy, (4) Setup Apache, Mod Rewrite. Mari kita mulai.

Setup DNS Record

Anyway, urusan DNS record adalah urusan DNS server :mrgreen: – Apapun tipe DNS Server Anda, konsepnya adalah mengarahkan subdomain tadi ke IP Address web server dimana Apache port 80 berada. Anda juga bisa memasukkan entri ini di file /etc/hosts, atau kalau di Windows, C:\Windows\System32\drivers\etc\hosts. Misalnya, IP Address tempat Apache port 80 adalah 192.168.10.2, maka, entri di file hosts (atau di DNS server) kira-kira sbb:

weblogic.example 192.168.10.2
tomcat.example 192.168.10.2
websphere.example 192.168.10.2

Setup Apache: Virtual Host

Masing-masing dari subdomain perlu diberikan Virtual Host tersendiri agar Apache tahu harus memproses setiap request yang datang ke subdomain yang tepat. Anyway, menurut saya, Apache adalah webserver yang paling fleksibel kalau urusan Virtual Host ini. Jadi, buatlah entri di file setting Apache di httpd.conf seperti di bawah ini:

<VirtualHost *>
ServerAdmin galih.satriaji@server.example
ServerName weblogic.example
ServerAlias www.weblogic.example
ErrorLog "logs/weblogic.example.err.log"
CustomLog "logs/weblogic.example.log" combined
</VirtualHost>

Blok kode ini akan memberitahu Apache untuk menggunakan setting-setting yang ada di bawah VirtualHost weblogic.example setiap kali ada request yang mengarah ke alamat URL weblogic.example. Setting ini tentu saja belum cukup karena si Apache belum diberitahu harus memproses file-file-nya dimana. Nah, karena si Apache ini kita gunakan hanya sebagai Front-End, maka pemrosesan request akan diteruskan oleh Apache ke Application Server di belakangnya (Back-End). Di sini yang perlu dilakukan adalah setup Reverse Proxy dan redirectornya.

Setup Apache: Reverse Proxy

Agar bertindak sebagai front-end, pada setting VirtualHost di atas perlu ditambahkan setting reverse proyx yang memberitahu Apache untuk meneruskan request ke application server di belakangnya.

<VirtualHost *>
ServerAdmin galih.satriaji@server.example
ServerName weblogic.example
ServerAlias www.weblogic.example
ErrorLog "logs/weblogic.example.err.log"
CustomLog "logs/weblogic.example.log" combined
ProxyRequests off
ProxyPass / http://192.168.10.2:7001/
ProxyPassReverse / http://192.168.10.2:7001/
</VirtualHost>

Sudah cukup? Belum, setting ini hanya akan meneruskan request dari http://weblogic.example ke http://192.168.10.2:7001/ saja. Padahal yang dituju adalah http://192.168.10.2:7001/wls. Kita perlu menambahkan sebuah redirector, agar nantinya setiap URL yang diketik http://weblogic.example akan diredirect menjadi http://weblogic.example/wls. Proses redirecting dari port 80 ke 7001 dilakukan secara implisit, tidak mengubah struktur URL yang terlihat oleh user. Jadi tambahannya menjadi seperti ini:

<VirtualHost *>
ServerAdmin galih.satriaji@server.example
ServerName weblogic.example
ServerAlias www.weblogic.example
ErrorLog "logs/weblogic.example.err.log"
CustomLog "logs/weblogic.example.log" combined
ProxyRequests off
ProxyPass / http://192.168.10.2:7001/
ProxyPassReverse / http://192.168.10.2:7001/
<Location />
RedirectMatch ^/$ /wls/
</Location>
</VirtualHost>

Nah, ini kasusnya setiap URL weblogic.example akan menjadi weblogic.example/wls. Seakan-akan web server nya ada di port 80, menggunakan Apache. Padahal, Apache hanya meneruskan saja ke server Weblogic yang ada di port 7001.

Pertanyaan satu milyarnya, bagaimana membuat URL yang benar-benar implisit, weblogic.example tanpa harus diredirect ke /wls? Jadi weblogic.example akan terlihat tetap weblogic.example, meskipun lokasinya di back-end server adalah http://192.168.10.2:7001/wls/? Di sini, kita perlu satu teknologi lagi bernama URL Mod Rewrite dari Apache.

Setup Apache: URL Rewriting

Apache memiliki teknologi penulisan kembali URL yang memungkinkan seorang webmaster mengubah-ubah struktur URL tanpa harus mengubah apa yang terlihat di browser-nya user. Jadi URL yang simpel, indah, dan mudah dihapalkan user bisa tetap dipertahankan meskipun aplikasi memerlukan struktur URL yang ruwet. Contoh gampangnya ya WordPress ini, dia membuat URL dengan simpel misalnya http://blog.galihsatria.com/2012/05/front-end yang aplikasinya sebenarnya memerlukan URL yang ruwet seperti http://blog.galihsatria.com/post.php?permalink=front-end&year=2012&month=05.

Nah, supaya URL weblogic.example tetap diam (tapi sebenarnya di-forward ke weblogic.example:7001/wls), kita memerlukan tambahan setting untuk URL rewrite. Diperlukan kemampuan mengenai regular expression tingkat dewa di sini, tapi sebenarnya tinggal Googling aja bisa. Saya menemukan settingan di bawah ini dari hasil bertanya ke Eyang Google:

<VirtualHost *>
ServerAdmin galih.satriaji@server.example
ServerName weblogic.example
ServerAlias www.weblogic.example
ErrorLog "logs/weblogic.example.err.log"
CustomLog "logs/weblogic.example.log" combined
ProxyRequests off
ProxyPass / http://192.168.10.2:7001/
ProxyPassReverse / http://192.168.10.2:7001/
RewriteEngine on
Options +FollowSymLinks
RewriteRule ^(.*+)$ /wls/$1 [L,QSA]
</VirtualHost>

Penutup

Tentu saja Anda harus mengaktifkan modul-modul Apache untuk mengaktifkan setting-setting di atas, yaitu modul Virtual Host, Mod Proxy, dan Mod Rewrite. Ini adalah settingan yang sudah saya tes jalan di webserver saya untuk mengaplikasikan model front-end dan back-end ini. Apakah ini juga akan jalan di server Anda, belum tentu — besar kemungkinan tidak :p. Selamat mencoba dan jangan lupa di share kalau sudah berhasil!

Author: Galih Satriaji

Bookaholic, Workaholic. Chubby. That's me!

Leave a Reply

Your email address will not be published. Required fields are marked *