Saya terutama seorang pengembang Java, dan saya datang kepada Anda dengan sebuah pertanyaan yang mengangkang kesenjangan antara pengembang dan sysadmin.
Bertahun-tahun yang lalu, ketika menjalankan Tomcat sebagai server aplikasi adalah hal yang baru, sudah lazim untuk menggunakannya dengan Apache. Seperti yang saya pahami, ini dilakukan karena:
- Java dianggap "lambat", dan itu membantu untuk memiliki Apache melayani konten statis secara langsung.
- Tomcat tidak bisa mendengarkan port 80/443 kecuali dijalankan sebagai root, yang berbahaya.
Java tidak lagi dianggap lambat, dan saya ragu menambahkan Apache ke dalam campuran sebenarnya akan membantu mempercepat.
Adapun masalah port, mungkin ada cara sederhana untuk menghubungkan server aplikasi ke port 80/443 hari ini.
Jadi pertanyaan saya adalah- apakah benar-benar ada manfaatnya untuk mem-forward Java Webapps dengan Apache belakangan ini? Jika demikian, apakah Apache masih jalan? Haruskah saya melihat Nginx? Alih-alih Tomcat saya menggunakan Glassfish, jika itu penting.
sumber
Itu tergantung pada ekosistem di sekitar aplikasi Anda. Di lingkungan intranet - Anda mungkin tidak perlu apa pun di depan Tomcat.
Jika sendirian di internet sebagai layanan yang dihadapi publik, itu tergantung. Apache bagus karena modul yang disediakannya seperti mod_security. Tetapi jika Anda tidak memiliki pengetahuan tentang konfigurasi apache (atau ngix) - maka Anda dapat mengekspos diri Anda terhadap serangan LEBIH BANYAK atau titik kegagalan karena kesalahan konfigurasi.
Apache di depan sangat berguna untuk melayani halaman pemadaman dalam kasus di mana Anda perlu meningkatkan aplikasi web dan menunggu untuk memulai kembali. Tetapi jika restart jarang atau waktunya tepat - maka alasan lain untuk pergi Tomcat mandiri.
FAQ Tomcat juga membicarakan hal ini juga yang membahas beberapa poin tambahan: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3
sumber
Apache bukan kandidat yang baik untuk menyajikan konten statis karena sifatnya multi-proses. Nginx lebih cocok karena menggunakan I / O asinkron untuk memproses permintaan. Tomcats modern dapat menggunakan I / O asinkron (NIO dalam terminologi Java) juga. Misalnya, Anda harus menginstal
tomcat-native
paket di Fedora untuk membuat Tomcat menggunakan async I / O.sumber
Luar biasa, beberapa jawaban ini - apakah ada di antara kalian yang benar-benar menjalankan situs web Tomcat yang didukung multi-tier dan mutli-server? OP, anggapan awal Anda bahwa Tomcat tidak "lambat" ... wow. Mesin Tomcat adalah tumit Achilles dari seluruh ekosfer.
Ya, Anda ingin Apache di depan - ia menyediakan mod_rewrite pertama dan terpenting (apakah Anda sudah mengimplementasikan UrlRewriteFilter di Tomcat Anda?) Serta file htaccess yang membuat melindungi server web begitu penting. Apache dapat memungkinkan Anda untuk memuat saldo node Tomcat di belakangnya, melayani konten statis Anda lebih cepat dan mendapatkan kinerja yang lebih baik dari Tomcat karena Anda tidak membebani permintaan pipa itu dengan non-Jawa (js / css / html / jpg / dll.) sesuatu. Anda dapat membongkar SSL Anda di Apache (jika tidak membongkar di perangkat keras LB) dengan mudah dan bahkan tidak harus berurusan dengan parodi yang disebut Java Keystore. Ada begitu banyak kemenangan - Anda dapat menyetel mod_jk ke node backend Anda untuk menjaga agar tidak menguasai otak kecil Java yang malang karena biasanya tidak dapat menangani lalu lintas besar dengan Java coder rata-rata '
Waspadalah siapa pun yang memberi tahu Anda bahwa Apache (atau nginx, dll - tetapi kinerja Apache akan lebih baik daripada Tomcat sehingga tidak masalah) bukanlah ide yang baik di depan Tomcat.
sumber
Jika itu hanya masalah pengikatan port privileges tanpa harus di-root ketika menggunakan Tomcat, Anda tidak perlu menggunakannya dengan Apache httpd. Tomcat secara default dikirimkan dengan
jsvc
yang perlu Anda kompilasi.jsvc
adalah pembungkus layanan java untuk meluncurkan Tomcat sebagai layanan. Layanan ini dimulai sebagai root tetapi mulai Tomcat sebagai pengguna normal. Jadi Anda dapat mengikat Tomcat Anda ke port istimewa.Saya tidak tahu tentang GlassFish, tetapi pastikan ada solusi dan jika tidak, Anda pasti dapat menggunakan teknik penerusan port (iptables, dll ...)
Saya pikir pilihan untuk mem-fronting server aplikasi dengan server web (misalnya Apache httpd) adalah untuk load balancing, clustering atau melayani sumber daya statis hanya dengan server web dan sumber daya dinamis dengan server aplikasi.
sumber