GNU/Linux >> Belajar Linux >  >> Linux

Cara mengatur proxy server web Apache di depan Apache Tomcat di Red Hat Linux

Tujuan

Tujuan kami adalah menyiapkan Apache httpd agar berfungsi sebagai proxy di depan wadah aplikasi Apache Tomcat.

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem operasi: Red Hat Enterprise Linux 7.5
  • Perangkat Lunak: Apache httpd, Apache Tomcat

Persyaratan

Akses istimewa ke sistem

Kesulitan

MUDAH

Konvensi

  • # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ – perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa

Pengantar

Menggunakan Apache httpd sebagai proxy ke wadah aplikasi Apache Tomcat adalah pengaturan umum. Muncul dengan banyak kasus penggunaan, yang paling sepele adalah menyajikan konten statis dari httpd , sambil menyediakan layanan yang mengimplementasikan logika bisnis berat dari aplikasi yang ditulis dalam Java yang berada di wadah Tomcat.

Dengan membuat proxy, kita dapat membuat semacam front-end ke lapisan aplikasi, di mana kita dapat memperkenalkan langkah-langkah keamanan di server web, menerapkan penyeimbangan beban, menggunakan pengalihan bersyarat, atau menggunakan fungsionalitas lain yang disediakan oleh server web. Dengan cara ini kami tidak perlu mengimplementasikan salah satu fitur ini di aplikasi kami, dan dapat memfokuskan kemampuannya ke layanan itu sendiri. Kami akan memiliki server web berfitur lengkap yang disajikan untuk pengguna, beberapa url diteruskan secara diam-diam ke wadah aplikasi yang mungkin tidak dapat diakses dengan sendirinya. Jawaban aplikasi diteruskan kembali ke klien yang tidak akan tahu bahwa mereka berbicara apa pun selain server web – yaitu, jika kita berhati-hati untuk tidak memaparkan informasi apa pun (seperti pesan kesalahan yang tidak ditangani) dari aplikasi yang dapat membuat mereka menebak ada lebih banyak informasi dari satu lapisan.

Kami akan menggunakan protokol AJP yang dapat digunakan antara server web dan wadah aplikasi berbasis Java untuk menyediakan kemampuan untuk menyeimbangkan beban antara beberapa server aplikasi – namun, untuk menyiapkan penyeimbang beban berada di luar cakupan tutorial ini.

Kami akan mengonfigurasi pengaturan kami di Red Hat Linux 7.5, tetapi server web Apache, modul AJP, dan wadah aplikasi Apache Tomcat tersedia di mana-mana, dan dengan demikian pengaturan ini portabel dengan sedikit penyesuaian seperti jalur sistem file atau nama layanan.

Menginstal perangkat lunak yang diperlukan

Pertama kita perlu menginstal layanan yang akan kita gunakan. Dalam penyiapan seimbang beban, server Tomcat dapat berada di mesin yang berbeda, dan sering kali, menyediakan kumpulan kontainer yang membangun layanan.

# yum install httpd tomcat tomcat-webapps

Kami menginstal tomcat-webapps untuk tujuan pengujian, dalam paket ini adalah contoh aplikasi web yang disebarkan ke server Tomcat kami saat instalasi. Kami akan menggunakan aplikasi ini untuk menguji apakah penyiapan kami berfungsi sebagaimana mestinya.

Sekarang kita dapat mengaktifkan dan memulai server Tomcat kita:

# systemctl enable tomcat
# systemctl start tomcat

Dan server web kami:

# systemctl enable httpd
# systemctl start httpd

httpd default instalasi berisi modul proxy yang kita butuhkan. Untuk memeriksa apakah benar, kita dapat menanyakan server web dengan apachectl :

# apachectl -M | grep ajp
 proxy_ajp_module (shared)

Catatan:1.x versi Apache menggunakan mod_jk modul alih-alih proxy_ajp .

konfigurasi httpd

Contoh aplikasi web yang disebarkan ke Tomcat diterbitkan setelah instalasi secara default di server-url:8080/examples . Kami akan memproksi permintaan yang datang ke port 80 server (port http default) meminta sesuatu dari server-url/examples untuk dilayani oleh examples aplikasi web dikerahkan ke Tomcat. Permintaan yang datang ke URL lain di server akan dilayani oleh server web. Kami akan menyiapkan beberapa konten statis untuk menampilkan fungsi ini.

Dalam contoh kami server disebut ws.foobar.com . Agar proxy berfungsi, buat file teks dengan editor favorit Anda di bawah direktori konfigurasi drop-in server web, yaitu /etc/httpd/conf.d pada rasa Red Hat, dengan ekstensi .conf . Pengaturan kami tidak membutuhkan Tomcat untuk dapat dijangkau secara langsung, jadi kami menggunakan localhost sebagai host target di /etc/httpd/conf.d/example_proxy.conf berkas:

<VirtualHost ws.foobar.com:80>
  ServerName ws.foobar.com

  ProxyRequests Off
  ProxyPass /examples ajp://localhost:8009/examples
  ProxyPassReverse /examples ajp://localhost:8009/examples
</VirtualHost>

Agar aman, kami dapat memverifikasi bahwa konfigurasi kami benar sebelum menerapkan dengan apachectl :

# apachectl configtest
Syntax OK

Jika tes konfigurasi mengembalikan kesalahan seperti berikut:

Could not resolve host name ws.foobar.com -- ignoring!

Jika berarti ServerName kami direktif tidak valid, karena tidak dapat diselesaikan oleh server web. Entah kita perlu mendaftarkannya di DNS (lokal atau global), atau memberikan baris di /etc/hosts file yang berisi alamat IP publik host diikuti dengan nama yang kami berikan pada konfigurasi di atas. Jika file host sudah berisi IP dengan nama lain (mungkin nama host asli), kita dapat menambahkan nama server setelah nama host di baris yang sama, penyiapan akan berhasil.

Setelah pengujian berhasil, kita perlu menerapkan konfigurasi baru dengan memulai ulang server web:

# systemctl restart httpd

Konfigurasi Tomcat

Dengan penginstalan default, wadah Tomcat akan mendengarkan permintaan AJP pada semua antarmuka pada port 8009. Ini dapat diverifikasi di file konfigurasi utama:

# view /usr/share/tomcat/conf/server.xml
[..]
<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
[..]

Jika kita tidak membutuhkan wadah Tomcat dan aplikasi di dalamnya untuk dapat dijangkau sendiri, kita dapat mengatur setiap konektor untuk mendengarkan hanya di localhost:

Connector address="127.0.0.1" port=..."

Untuk menerapkannya, kita dapat memulai ulang Tomcat dengan:

# systemctl restart tomcat

Di mesin lab kami tidak akan melakukan ini, karena kami perlu melihat bahwa kami disajikan konten yang sama di kedua port 80 dan 8080 .

Pengujian

Pengaturan proxy AJP minimal kami selesai, kami dapat mengujinya. Dari baris perintah kita dapat memanggil examples aplikasi langsung pada port 8080 :

$ wget http://ws.foobar.com:8080/examples
--2018-09-13 11:00:58--  http://ws.foobar.com:8080/examples
Resolving ws.foobar.com (ws.foobar.com)... 10.104.1.165
Connecting to ws.foobar.com (ws.foobar.com)|10.104.1.165|:8080... connected.
HTTP request sent, awaiting response... 302 Found
Location: /examples/ [following]
--2018-09-13 11:00:58--  http://ws.foobar.com:8080/examples/
Reusing existing connection to ws.foobar.com:8080.
HTTP request sent, awaiting response... 200 OK
Length: 1253 (1.2K) [text/html]
Saving to: 'examples'

100%[=========================================================================================================================================================================>] 1,253       --.-K/s   in 0s      

2018-09-13 11:00:58 (102 MB/s) - 'examples' saved [1253/1253]

Dan lihat konten yang disediakan:

$ tail examples
<h3>Apache Tomcat Examples</H3>
<p></p>
<ul>
<li><a href="servlets">Servlets examples</a></li>
<li><a href="jsp">JSP Examples</a></li>
<li><a href="websocket/index.xhtml">WebSocket (JSR356) Examples</a></li>
<li><a href="websocket-deprecated">WebSocket Examples using the deprecated
    Apache Tomcat proprietary API</a></li>
</ul>
</body></html>

Dan jika kami memanggil aplikasi yang sama melalui proxy AJP kami, kami juga harus mendapatkan jawaban, sementara tidak ada konten apa pun di root dokumen server web:

$ wget http://ws.foobar.com/examples
--2018-09-13 11:01:09--  http://ws.foobar.com/examples
Resolving ws.foobar.com (ws.foobar.com)... 10.104.1.165
Connecting to ws.foobar.com (ws.foobar.com)|10.104.1.165|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: /examples/ [following]
--2018-09-13 11:01:09--  http://ws.foobar.com/examples/
Reusing existing connection to ws.foobar.com:80.
HTTP request sent, awaiting response... 200 OK
Length: 1253 (1.2K) [text/html]
Saving to: 'examples.1'

100%[=========================================================================================================================================================================>] 1,253       --.-K/s   in 0s      

2018-09-13 11:01:09 (101 MB/s) - 'examples.1' saved [1253/1253]

Jika semua berhasil, kita akan mendapatkan jawaban dengan isi yang sama, karena jawaban akhir disediakan oleh aplikasi yang sama di dalam wadah:

$ tail examples.1
<h3>Apache Tomcat Examples</h3>
[...]

Kami juga dapat menguji pengaturan kami dengan browser. Kita perlu memanggil semua URL dengan nama server sebagai host (setidaknya yang diproksi). Untuk itu mesin yang menjalankan browser harus dapat menyelesaikan nama server, melalui DNS atau file host.

Di lingkungan lab kami, kami belum menonaktifkan mendengarkan Tomcat di antarmuka publik, jadi kami dapat melihat apa yang disediakan saat ditanya langsung di port 8080 :

Tomcat memberikan contoh aplikasi

Kita bisa mendapatkan konten yang sama melalui proxy AJP yang disediakan oleh server web pada port 80 :

httpd menyediakan contoh aplikasi dengan proxy AJP

Saat bertindak sebagai proxy, httpd dapat menyajikan konten lainnya. Kami dapat membuat konten statis yang dapat dijangkau di beberapa URL lain di server yang sama:

# mkdir /var/www/html/static_content
# echo "<html><body>Static content</body></html>" > /var/www/html/static_content/static.html

Dengan mengarahkan browser kami ke sumber daya baru ini, kami diberikan konten statis baru.

Konten statis disediakan oleh httpd

Jika wadah Tomcat tidak dapat dijangkau, kami tidak akan tahu jawabannya datang di tempat lain selain server web. Karena kami hanya mem-proxy aplikasi tertentu, aplikasi ROOT default container tidak dapat dijangkau melalui proxy, sehingga tersembunyi dari segala sesuatu di luar server web.

Kesimpulan

Webserver Apache sangat dapat diperluas melalui modul, salah satunya adalah modul proxy AJP. Panduan di atas menggunakan satu mesin dan memaparkan satu aplikasi dengan proxy, tetapi server web yang sama dapat menyediakan satu entri ke banyak aplikasi, mungkin pada banyak host yang menjalankan wadah aplikasi, sambil menyediakan konten web lain juga.

Dikombinasikan dengan modul lain, seperti mod_security , kami dapat menambahkan banyak fitur ke layanan kami tanpa perlu mengembangkannya di dalam aplikasi, atau jika perlu, mengalihkan proxy ke titik akhir lain dengan satu edisi file konfigurasi dan memuat ulang server web, melakukan migrasi atau pengenalan rilis baru aplikasi hitungan detik. Muat ulang yang sama dapat mengarahkan pengunjung ke halaman yang menjelaskan waktu henti yang direncanakan, sementara pemeliharaan dilakukan pada server aplikasi – kasus penggunaan proxy AJP hanya dibatasi oleh imajinasi staf TI.


Linux
  1. Cara mencerminkan repositori di Linux

  2. Bagaimana mempersiapkan ujian sertifikasi administrator sistem Linux

  3. Bagaimana Mendapatkan Red Hat Enterprise Linux Secara Gratis?

  1. Apa itu Red Hat Linux?

  2. Cara Mengatur Pengaturan Proxy di baris perintah atau Terminal Linux

  3. Cara me-mount partisi baru di Red hat linux

  1. Cara mengatur SSL/TLS dengan Apache httpd di Red Hat

  2. Bagaimana cara menambahkan repositori ke Red Hat Linux dengan dan tanpa proxy

  3. Cara install apache tomcat di linux RHEL 8 / CentOS 8