Konfigurasi mod_jk
Posted on August 15th, 2007 | by endy |Ada kalanya, kita ingin mempublikasikan aplikasi Java kita melalui Apache HTTPD, webserver paling populer dan paling banyak digunakan di dunia.
Beberapa alasan untuk melakukan ini antara lain:
- Kita ingin menjalankan Tomcat dalam cluster, diakses melalui satu pintu gerbang, yaitu Apache HTTPD
- Kita tidak ingin membuka port 8080 ke seluruh dunia, cukup buka port 80 dan 443 saja. Sedangkan di port 80 sudah ada aplikasi lain (PHP, Rails, whatever) yang dihosting di atas Apache HTTPD
- Kita ingin melayani static page dengan Apache HTTPD, dan dynamic page dengan Tomcat
- Dan masih banyak alasan lain.
Konfigurasi ini saya lakukan di Ubuntu Feisty 7.04. Langkah-langkahnya relatif mirip untuk distro lain, yang kalau disimpulkan terdiri dari:
- Install Apache
- Install Tomcat
- Deploy Aplikasi Java di Tomcat
- Install mod_jk
- Konfigurasi worker
- Konfigurasi virtual host
Baiklah, mari kita mulai saja.
Instalasi Apache
Saya gunakan Apache 2.2 yang disediakan oleh repository Ubuntu. Instalasi sangat mudah:
sudo apt-get install apache2
Setelah instalasi selesai pastikan webserver sudah berjalan dengan baik dengan cara mengakses http://localhost
Instalasi Tomcat
Kita bisa menginstal Tomcat melalui apt-get, tetapi saya lebih suka menggunakan cara manual.
Unduh dari situsnya, kemudian ekstrak di folder /opt.
cd /opt
sudo tar xvzf apache-tomcat-xx.tar.gz
Setelah itu, jalankan Tomcat.
sudo /opt/tomcat/bin/startup.sh
Jangan lupa mengatur environment variable JAVA_HOME ke tempat instalasi Java SDK Anda sebelum menjalankan Tomcat.
Periksa keberhasilan instalasi Tomcat dengan cara browse ke http://localhost:8080
Deploy Aplikasi Java
Pada saat ini, kita sudah bisa mendeploy aplikasi Java ke Tomcat, tepatnya di folder [TOMCAT_HOME]/webapps.
Untuk mudahnya, kita tidak akan instal aplikasi, tapi menggunakan tomcat-docs yang sudah disediakan Tomcat.
Install mod_jk
Instalasi mod_jk di Ubuntu sangat mudah, cukup lakukan sudo apt-get install libapache2-mod-jk
mod_jk akan diinstal dan langsung diaktifkan.
Sebelum mod_jk bisa bekerja dengan benar, kita harus melakukan sedikit konfigurasi. Saya membuat file konfigurasi di /etc/apache2/mods-available/jk.conf.
Letak file konfigurasi tidak penting, yang penting adalah file tersebut dibaca oleh Apache. Silahkan baca-baca manual konfigurasi untuk distro Anda
Berikut adalah isi file /etc/apache2/mods-available/jk.conf.
JkWorkersFile /etc/apache2/mods-available/workers.properties
JkShmFile /var/log/apache2/mod_jk.shm
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:$S %Y] "
Seperti kita lihat di baris pertama, ada referensi ke file workers.properties. Kita akan bahas file ini di bagian selanjutnya.
Sisa file ini mendefinisikan konfigurasi log file.
Konfigurasi Workers
File workers.properties mendefinisikan semua worker yang tersedia. Worker adalah Tomcat yang akan melayani request ke aplikasi Java. Untuk mengaktifkan clustering, kita bisa mengkonfigurasi banyak worker sekaligus.
Saat ini, sebagai contoh kita akan mengkonfigurasi satu saja dulu.
Berikut adalah isi file workers.properties
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
Konfigurasi Virtual Host
Terakhir, kita akan mengkonfigurasi virtual host agar Apache HTTPD dapat melakukan forwarding dengan benar. Pada contoh ini, kita akan mengarahkan request ke http://localhost/tomcat-docs agar dilayani oleh Tomcat. Berikut konfigurasi Virtual Hostnya.
<VirtualHost>
JkMount /tomcat-docs/* worker1
</VirtualHost>
Jika ingin mempublikasikan banyak aplikasi Java sekaligus, duplikasi saja baris JkMount di atas agar mengarah ke masing-masing aplikasi kita yang sudah dideploy di dalam folder [TOMCAT_HOME]/webapps.
Konfigurasi virtual host di atas bisa digabungkan dengan konfigurasi lain seperti repository Subversion, Ruby on Rails, dan sebagainya. Cukup selipkan baris JkMount di dalam blok VirtualHost.
Letak konfigurasi Virtual Host berbeda antar distro. Di keluarga Debian, konfigurasinya ada di folder /etc/apache2/sites-available.
Setelah selesai, coba restart Apache HTTPD. Kalau semua berjalan lancar, dokumentasi Tomcat yang tadinya hanya bisa diakses di http://localhost:8080/tomcat-docs/ sekarang juga bisa diakses di http://localhost/tomcat-docs/. Perhatikan perbedaan portnya, yang belakangan dilayani oleh Apache HTTPD.
Selamat mencoba ![]()
5 Responses to “Konfigurasi mod_jk”
By novan on Aug 15, 2007 | Reply
kebetulan niy. saya sempat mencari cara untuk menjalankan aplikasi servlet di apache2 dan saya sempet cukup hepi dengan konfigurasi apache2 + modjk + tomcat. tapi akhirnya saya sadar bahwa ini sama aja dengan menggandeng gajah dengan gajah, dimana sebenarnya yg saya butuhkan itu adalah apache2 + modjk + servlet container. saya belum sempat nemuin cara gimana menjalankan servlet container tanpa menjalan si tomcat container nya itu sendiri. saya coba untuk bongkar2 source code nya tomcat malah saya yang pusing sendiri.
ada saran lain?
akhirnya saya nemuin winstone (http://winstone.sourceforge.net) sebagai alternatif yg cukup bagus. winstone cuma satu file jar saja dan bisa di konfigurasi sedemikian rupa sehingga bisa menjalankan hanya servlet container nya saja dan mendisable fungsi http nya. sampe disini saya udah cukup puas cuma masi ragu dengan kestabilan si winstone itu sendiri.
belakangan saya nemuin ada nya remote exploit untuk apache2 + mod_jk yang bikin saya batal menggunakan kombinasi tersebut (http://securityreason.com/exploitalert/2464)
By ifnu on Aug 23, 2007 | Reply
cluster disini maksudnya apa ya mas? yang dicluster sessionya kah?
By endy on Aug 24, 2007 | Reply
Tomcatnya dicluster. Jadi aplikasi webnya dideploy di banyak Tomcat sekaligus, tapi dari luar (client) lihatnya cuma satu aja, yaitu Apachenya.
Kalo gak dikasi Apache di depan, client jadi harus tau address dan port masing2 Tomcat.
Dalam hal ini, Apache httpd berfungsi sebagai load balancer.
By abud on Sep 11, 2007 | Reply
Solusi lain dengan menambahkan JkAutoAlias di jk.conf agar di webapps dianggap virtual direktori
JkAutoAlias /opt/tomcat/webapps