Cara Menyiapkan Proksi Webserver Apache Di hadapan Apache Tomcat di Red Hat Linux

Cara Menyiapkan Proksi Webserver Apache Di hadapan Apache Tomcat di Red Hat Linux

Objektif

Objektif kami adalah untuk menyiapkan Apache Httpd untuk berfungsi sebagai proksi di hadapan bekas permohonan Apache Tomcat.

Sistem operasi dan versi perisian

  • Sistem operasi: Red Hat Enterprise Linux 7.5
  • Perisian: Apache Httpd, Apache Tomcat

Keperluan

Akses istimewa ke sistem

Kesukaran

Mudah

Konvensyen

  • # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ - Memandangkan perintah Linux dilaksanakan sebagai pengguna yang tidak berkadar biasa

Pengenalan

Menggunakan Apache Httpd sebagai proksi ke bekas aplikasi Tomcat Apache adalah persediaan biasa. Ia datang dengan banyak kes penggunaan, yang paling remeh adalah melayani kandungan statik dari httpd, Semasa menyediakan perkhidmatan yang melaksanakan logik perniagaan berat dari permohonan yang ditulis di Java yang tinggal di dalam bekas Tomcat.

Dengan membuat proksi, kita boleh membuat semacam front-end ke lapisan aplikasi, di mana kita dapat memperkenalkan langkah-langkah keselamatan di webserver, memohon pengimbangan beban, menggunakan redirect bersyarat, atau menggunakan sebarang fungsi lain yang disediakan oleh webserver. Dengan cara ini kita tidak perlu melaksanakan mana -mana ciri ini dalam aplikasi kami, dan boleh memfokuskan keupayaannya kepada perkhidmatan itu sendiri. Kami akan mempunyai webserver yang lengkap untuk pengguna, beberapa URL yang dikemukakan secara senyap ke bekas aplikasi yang mungkin tidak dapat diakses dengan sendirinya. Jawapan permohonan dikemukakan kembali kepada pelanggan yang tidak akan tahu bahawa mereka bercakap apa -apa selain webserver - iaitu, jika kita berhati -hati tidak mendedahkan apa daripada satu lapisan.

Kami akan menggunakan protokol AJP yang boleh digunakan di antara webservers dan bekas aplikasi berasaskan Java untuk memberikan keupayaan untuk mengimbangi beban antara pelayan pelbagai aplikasi - bagaimanapun, untuk menubuhkan pengimbang beban adalah keluar dari skop tutorial ini.

Kami akan mengkonfigurasi persediaan kami di Red Hat Linux 7.5, tetapi webserver Apache, modul AJP dan bekas aplikasi Apache Tomcat boleh didapati di mana -mana, dan oleh itu persediaan ini mudah alih dengan pelarasan kecil seperti laluan sistem fail atau nama perkhidmatan.



Memasang perisian yang diperlukan

Pertama kita perlu memasang perkhidmatan yang akan kita gunakan. Dalam persediaan seimbang beban Tomcat Server (s) boleh berada di mesin yang berbeza, dan selalunya mereka, menyediakan ladang bekas yang membina perkhidmatan.

# yum Pasang Httpd Tomcat Tomcat-WebApps

Kami memasang Tomcat-Webapps Untuk tujuan ujian, dalam pakej ini adalah contoh aplikasi web yang digunakan ke dalam pelayan Tomcat kami pada pemasangan. Kami akan menggunakan aplikasi ini untuk menguji bahawa persediaan kami berfungsi seperti yang dimaksudkan.

Sekarang kita dapat mengaktifkan dan memulakan pelayan Tomcat kami:

# Systemctl Dayakan Tomcat
# Systemctl Mula Tomcat

Dan webserver kami:

# Systemctl Dayakan Httpd
# Systemctl Mula Httpd

Lalai httpd Pemasangan mengandungi modul proksi yang kami perlukan. Untuk memeriksa bahawa ia begitu, kita boleh menanyakan webserver dengan Apachectl:

# apachectl -m | grep ajp proxy_ajp_module (dikongsi) 
Salinan

Nota: 1.X Apache menggunakan versi mod_jk modul bukan proxy_ajp.

Konfigurasi HTTPD

Contoh aplikasi web yang dikerahkan ke Tomcat diterbitkan selepas pemasangan secara lalai pelayan-url: 8080/contoh. Kami akan permintaan proksi yang datang ke port pelayan 80 (port HTTP lalai) yang meminta sesuatu dari Server-URL/Contoh untuk disampaikan oleh contoh Aplikasi Web yang dikerahkan ke Tomcat. Permintaan yang datang ke mana -mana URL lain di pelayan akan disampaikan oleh pelayan web. Kami akan menyediakan beberapa kandungan statik untuk menunjukkan fungsi ini.

Dalam contoh kami pelayan dipanggil WS.Foobar.com. Untuk proksi untuk berfungsi buat fail teks dengan editor kegemaran anda di bawah direktori konfigurasi drop-in webserver, iaitu /etc/httpd/conf.d pada rasa topi merah, dengan lanjutan .Conf. Persediaan kami tidak memerlukan Tomcat dapat dicapai secara langsung, jadi kami gunakan localhost sebagai tuan rumah sasaran di /etc/httpd/conf.d/contoh_proxy.Conf Fail:

 ServerName Ws.Foobar.com proxyrequests off proxypass/contoh ajp: // localhost: 8009/contoh proxypassreverse/contoh ajp: // localhost: 8009/contoh  
Salinan

Untuk berada di sisi yang selamat, kami dapat mengesahkan bahawa konfigurasi kami betul sebelum memohon Apachectl:

# Apachectl Configtest Syntax OK 
Salinan

Jika ujian konfigurasi mengembalikan ralat seperti yang berikut:

Tidak dapat menyelesaikan nama hos ws.Foobar.com - mengabaikan!

Sekiranya bermaksud bahawa kita Nama pelayan Arahan tidak sah, kerana ia tidak dapat diselesaikan oleh webserver. Sama ada kita perlu mendaftarkannya di DNS (tempatan atau global), atau memberikan garis di /etc/hos fail yang mengandungi alamat IP awam tuan rumah diikuti dengan nama yang kami berikan dalam konfigurasi di atas. Sekiranya fail tuan rumah sudah mengandungi IP dengan nama lain (mungkin nama hos sebenar), kita boleh menambah nama serveren selepas nama tuan rumah dalam baris yang sama, persediaan akan berfungsi.

Selepas ujian yang berjaya, kami perlu menggunakan konfigurasi baru dengan memulakan semula webserver:

# Systemctl mulakan semula httpd


Konfigurasi Tomcat

Dengan lalai memasang bekas Tomcat akan mendengar permintaan AJP pada semua antara muka di port 8009. Ini boleh disahkan dalam fail konfigurasi utama:

# Lihat/usr/share/tomcat/conf/pelayan.XML [...]   [...] 
Salinan

Jika kita tidak memerlukan bekas Tomcat dan aplikasi dalam dapat dicapai dengan sendirinya, kita boleh menetapkan setiap penyambung untuk mendengar hanya di localhost:

Alamat Penyambung = "127.0.0.1 "port = ..."

Untuk memohon, kita boleh memulakan semula Tomcat dengan:

# Systemctl mulakan semula tomcat

Di mesin makmal kami tidak akan melakukan ini, kerana kami perlu melihat bahawa kami dihidangkan kandungan yang sama di kedua -dua pelabuhan 80 dan 8080.

Ujian

Persediaan proksi AJP minimum kami selesai, kami dapat mengujinya. Dari baris arahan kita boleh memanggil contoh Permohonan terus di port 8080:

$ wget http: // ws.Foobar.com: 8080/contoh --2018-09-13 11: 00: 58-- http: // ws.Foobar.com: 8080/contoh menyelesaikan WS.Foobar.com (Ws.Foobar.com) .. . 10.104.1.165 Menyambung ke WS.Foobar.com (Ws.Foobar.com) | 10.104.1.165 |: 8080 .. . bersambung. Permintaan HTTP dihantar, menunggu tindak balas .. . 302 Ditemui Lokasi:/Contoh/[berikut] --2018-09-13 11: 00: 58-- http: // ws.Foobar.com: 8080/ contoh/ penggunaan semula sambungan yang ada ke WS.Foobar.com: 8080. Permintaan HTTP dihantar, menunggu tindak balas .. . 200 ok panjang: 1253 (1.2k) [Text/html] Penjimatan ke: 'Contoh' 100%[=========================================================================================== ================================================= ================================================= =================================>] 1,253 --.-K/s dalam 0s 2018-09-13 11:00:58 (102 MB/s)-'Contoh' disimpan [1253/1253]
Salinan

Dan lihat kandungan yang disediakan:

Contoh $ Tail 

Contoh Apache Tomcat

  • Contoh servlet
  • Contoh JSP
  • Contoh WebSocket (JSR356)
  • Contoh WebSocket menggunakan API Proprietari Apache Tomcat yang telah ditetapkan
Salinan

Dan jika kita memanggil aplikasi yang sama melalui proksi AJP kita, kita juga harus mendapat jawapan, sementara tidak ada kandungan dalam akar dokumen webserver:

$ wget http: // ws.Foobar.com/contoh --2018-09-13 11: 01: 09-- http: // ws.Foobar.com/contoh menyelesaikan WS.Foobar.com (Ws.Foobar.com) .. . 10.104.1.165 Menyambung ke WS.Foobar.com (Ws.Foobar.com) | 10.104.1.165 |: 80 .. . bersambung. Permintaan HTTP dihantar, menunggu tindak balas .. . 302 Ditemui Lokasi:/Contoh/[berikut] --2018-09-13 11: 01: 09-- http: // ws.Foobar.com/ contoh/ penggunaan semula sambungan yang ada ke WS.Foobar.com: 80. Permintaan HTTP dihantar, menunggu tindak balas .. . 200 ok panjang: 1253 (1.2K) [Teks/HTML] Penjimatan ke: 'Contoh.1 '100%[=============================================== ================================================= ================================================= ======================>] 1,253 --.-K/s pada 0s 2018-09-13 11:01:09 (101 Mb/s)-'Contohnya.1 'disimpan [1253/1253]
Salinan

Jika semua berfungsi, kami akan mendapat jawapan dengan kandungan yang sama, kerana jawapan akhir disediakan oleh aplikasi yang sama dalam bekas:

Contoh $ Tail.1 

Contoh Apache Tomcat

[… .]
Salinan

Kami juga boleh menguji persediaan kami dengan penyemak imbas. Kita perlu memanggil semua URL dengan nama pelayan sebagai tuan rumah (sekurang -kurangnya yang proksi). Untuk itu mesin yang menjalankan penyemak imbas perlu dapat menyelesaikan nama pelayan, dengan menggunakan fail DNS atau tuan rumah.

Di persekitaran makmal kami, kami tidak melumpuhkan Tomcat mendengar di antara muka awam, jadi kami dapat melihat apa yang diberikan apabila ditanya secara langsung di port 8080:



Tomcat menyediakan contoh contoh

Kami boleh mendapatkan kandungan yang sama melalui proksi AJP yang disediakan oleh webserver di port 80:

httpd menyediakan aplikasi contoh dengan proksi AJP

Semasa bertindak sebagai proksi, httpd boleh melayani kandungan lain. Kami boleh membuat kandungan statik yang dapat dicapai pada beberapa URL lain pada pelayan yang sama:

# mkdir/var/www/html/static_content # echo "kandungan statik">/var/www/html/static_content/statik.html
Salinan

Dengan menunjuk penyemak imbas kami kepada sumber baru ini, kami disediakan dengan kandungan statik baru.

Kandungan statik yang disediakan oleh httpd

Sekiranya bekas Tomcat tidak dapat dicapai, kami tidak akan tahu jawapan yang akan datang selain daripada webserver. Seperti yang kita proksi hanya aplikasi tertentu, aplikasi root lalai kontena tidak dapat dicapai melalui proksi, dengan itu tersembunyi dari segala -galanya di luar pelayan web.

Kesimpulan

Webserver Apache sangat diperluaskan dengan cara modul, salah satunya adalah modul proksi AJP. Panduan di atas menggunakan satu mesin dan mendedahkan satu aplikasi dengan proksi, tetapi webserver yang sama dapat memberikan entri tunggal kepada banyak aplikasi, mungkin pada banyak tuan rumah yang menjalankan bekas aplikasi, sambil menyediakan kandungan web lain juga.

Digabungkan dengan modul lain, seperti mod_security, Kami boleh menambah banyak ciri ke perkhidmatan kami tanpa perlu membangunkannya dalam aplikasi, atau jika keperluan timbul, mengalihkan proksi ke titik akhir yang lain dengan edisi tunggal fail konfigurasi dan tambah nilai webserver, membuat penghijrahan atau Pengenalan pelepasan baru aplikasi. Tambah nilai yang sama boleh membawa pelawat ke halaman yang menerangkan downtime yang dirancang, sementara penyelenggaraan dilakukan pada pelayan aplikasi - kes penggunaan proksi AJP hanya terhad oleh imaginasi kakitangan IT.

Tutorial Linux Berkaitan:

  • Ubuntu 20.04 Pemasangan Tomcat
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Muat turun linux
  • Bolehkah linux mendapat virus? Meneroka kelemahan Linux ..
  • Tutorial Konfigurasi Proksi Squid di Linux
  • Distro linux terbaik untuk pemaju
  • Panduan Penyelesaian Masalah Umum GNU/Linux untuk Pemula
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..