GNU/Linux >> Linux の 問題 >  >> Linux

RedHatLinuxでApacheTomcatの前にApacheWebサーバープロキシを設定する方法

目的

私たちの目的は、ApachehttpdをApacheTomcatアプリケーションコンテナの前でプロキシとして機能するように設定することです。

オペレーティングシステムとソフトウェアのバージョン

  • オペレーティングシステム: Red Hat Enterprise Linux 7.5
  • ソフトウェア: Apache httpd、Apache Tomcat

要件

システムへの特権アクセス

難易度

簡単

規約

  • –指定されたLinuxコマンドは、rootユーザーとして直接、またはsudoを使用して、root権限で実行する必要があります。 コマンド
  • $ –通常の非特権ユーザーとして実行されるLinuxコマンドを指定

はじめに

ApachehttpdをApacheTomcatアプリケーションコンテナのプロキシとして使用するのが一般的な設定です。多くのユースケースが付属していますが、最も簡単なのはhttpdから静的コンテンツを提供することです。 、Tomcatコンテナに常駐するJavaで記述されたアプリケーションから重いビジネスロジックを実装するサービスを提供している間。

プロキシを作成することで、アプリケーション層に一種のフロントエンドを作成できます。このフロントエンドでは、Webサーバーにセキュリティ対策を導入したり、負荷分散を適用したり、条件付きリダイレクトを使用したり、Webサーバーが提供するその他の機能を使用したりできます。このように、アプリケーションにこれらの機能を実装する必要はなく、その機能をサービス自体に集中させることができます。フル機能のWebサーバーがユーザーに提供され、一部のURLは、それ自体ではアクセスできない可能性のあるアプリケーションコンテナーにサイレントに転送されます。アプリケーションの回答は、Webサーバー以外のことを話していることを知らないクライアントに転送されます。つまり、アプリケーションからの情報(未処理のエラーメッセージなど)を公開しないように注意すれば、さらに多くの情報があると推測できます。 1層より。

WebサーバーとJavaベースのアプリケーションコンテナ間で使用できるAJPプロトコルを使用して、複数のアプリケーションサーバー間で負荷を分散する機能を提供しますが、ロードバランサーを設定することはこのチュートリアルの範囲外です。

>

Red Hat Linux 7.5でセットアップを構成しますが、Apache Webサーバー、AJPモジュール、およびApache Tomcatアプリケーションコンテナーはどこでも利用できるため、このセットアップは、ファイルシステムパスやサービス名などの小さな調整で移植可能です。

必要なソフトウェアのインストール

まず、使用するサービスをインストールする必要があります。負荷分散されたセットアップでは、Tomcatサーバーは異なるマシン上にある可能性があり、多くの場合、それらはサービスを構築するコンテナーのファームを提供します。

# yum install httpd tomcat tomcat-webapps

tomcat-webappsをインストールします テスト目的で、このパッケージには、インストール時にTomcatサーバーにデプロイされたWebアプリケーションの例が含まれています。このアプリケーションを使用して、セットアップが意図したとおりに機能していることをテストします。

これで、Tomcatサーバーを有効にして起動できます:

# systemctl enable tomcat
# systemctl start tomcat

そして私たちのウェブサーバー:

# systemctl enable httpd
# systemctl start httpd

デフォルトのhttpd インストールには、必要なプロキシモジュールが含まれています。そうであることを確認するために、apachectlを使用してWebサーバーにクエリを実行できます。 :

# apachectl -M | grep ajp
 proxy_ajp_module (shared)

注:1.xApacheバージョンはmod_jkを使用します proxy_ajpの代わりにモジュール 。

httpd構成

TomcatにデプロイされたサンプルWebアプリケーションは、デフォルトでインストール後にserver-url:8080/examplesに公開されます。 。 server-url/examplesから何かをリクエストするサーバーのポート80(デフォルトのhttpポート)に着信するリクエストをプロキシします examplesによって提供されます TomcatにデプロイされたWebアプリケーション。サーバー上の他のURLに送信されるリクエストは、Webサーバーによって処理されます。この機能を示すために、いくつかの静的コンテンツを設定します。

この例では、サーバーの名前はws.foobar.comです。 。プロキシが機能するには、Webサーバーのドロップイン構成ディレクトリ(/etc/httpd/conf.d)の下に、お気に入りのエディタでテキストファイルを作成します。 .confの拡張子を持つRedHatフレーバー 。セットアップではTomcatに直接アクセスできる必要がないため、localhostを使用します /etc/httpd/conf.d/example_proxy.confのターゲットホストとして ファイル:

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

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

安全のため、apachectlを使用して適用する前に、構成が正しいことを確認できます。 :

# apachectl configtest
Syntax OK

構成テストで次のようなエラーが返された場合:

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

Ifは、ServerName ディレクティブはウェブサーバーで解決できないため、無効です。 (ローカルまたはグローバル)DNSに登録するか、/etc/hostsに行を指定する必要があります ホストのパブリックIPアドレスの後に、上記の構成で指定した名前が続くファイル。ホストファイルに別の名前(実際のホスト名など)のIPがすでに含まれている場合は、同じ行のホスト名の後にサーバー名を追加できます。セットアップは機能します。

テストが成功したら、Webサーバーを再起動して新しい構成を適用する必要があります。

# systemctl restart httpd

Tomcatの構成

デフォルトのインストールでは、Tomcatコンテナはポート8009のすべてのインターフェイスでAJP要求をリッスンします。これは、メインの構成ファイルで確認できます。

# 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" />
[..]

Tomcatコンテナとその中のアプリケーションに単独でアクセスできる必要がない場合は、すべてのコネクタをローカルホストでのみリッスンするように設定できます。

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

適用するには、次のコマンドでTomcatを再起動できます:

# systemctl restart tomcat

私たちのラボマシンでは、両方のポート80で同じコンテンツが提供されていることを確認する必要があるため、これは実行されません。 および8080

テスト

最小限のAJPプロキシのセットアップが完了し、テストできます。コマンドラインからexamplesを呼び出すことができます ポート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]

そして、提供された内容を参照してください:

$ 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>

また、AJPプロキシを介して同じアプリケーションを呼び出すと、ウェブサーバーのドキュメントルートにコンテンツがない場合でも、回答を得る必要があります。

$ 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]

すべてが機能する場合、最終的な回答はコンテナ内の同じアプリケーションによって提供されるため、同じ内容の回答が得られます。

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

ブラウザを使用してセットアップをテストすることもできます。サーバーの名前をホストとしてすべてのURLを呼び出す必要があります(少なくともプロキシされるURL)。そのためには、ブラウザを実行しているマシンがDNSまたはhostsファイルを使用してサーバー名を解決できる必要があります。

私たちのラボ環境では、パブリックインターフェイスでのTomcatリスニングを無効にしていないため、ポート8080で直接要求されたときに何が提供されるかを確認できます。 :

サンプルアプリケーションを提供するTomcat

ポート80でWebサーバーによって提供されるAJPプロキシを介して、同じコンテンツを取得できます。 :

httpdサンプルアプリケーションにAJPプロキシを提供する

プロキシとして機能している間、httpd 他のコンテンツを提供できます。同じサーバー上の他のURLで到達可能な静的コンテンツを作成できます:

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

ブラウザでこの新しいリソースを指定すると、新しい静的コンテンツが提供されます。

httpdによって提供される静的コンテンツ

Tomcatコンテナに到達できない場合、Webサーバー以外の場所に答えが来ることはわかりません。特定のアプリケーションのみをプロキシしたため、コンテナのデフォルトのROOTアプリケーションはプロキシを介して到達できず、ウェブサーバー以外のすべてから隠されています。

結論

Apache Webサーバーは、モジュールによって高度に拡張可能であり、そのうちの1つがAJPプロキシモジュールです。上記のガイドでは、1台のマシンを使用し、プロキシを使用して1つのアプリケーションを公開していますが、同じWebサーバーが、他のWebコンテンツも提供しながら、アプリケーションコンテナを実行している多くのホストで、多くのアプリケーションに単一のエントリを提供できます。

mod_securityなどの他のモジュールと組み合わせる 、アプリケーション内でそれらを開発する必要なしにサービスに多くの機能を追加できます。または、必要に応じて、構成ファイルの単一のエディションとWebサーバーのリロードを使用してプロキシを別のエンドポイントにリダイレクトし、移行またはアプリケーションの新しいリリースの導入はほんの数秒です。同じリロードにより、訪問者は計画されたダウンタイムを説明するページに移動できますが、メンテナンスはアプリケーションサーバーで実行されます。AJPプロキシの使用例は、ITスタッフの想像力によってのみ制限されます。


Linux
  1. Linuxでリポジトリをミラーリングする方法

  2. Linuxシステム管理者認定試験の準備方法

  3. Red Hat Enterprise Linuxを無料で入手するにはどうすればよいですか?

  1. Red Hat Linux とは?

  2. Linux コマンドラインまたはターミナルでプロキシ設定を設定する方法

  3. Red Hat Linux で新しいパーティションをマウントする方法

  1. RedHatでApachehttpdを使用してSSL/TLSを設定する方法

  2. プロキシを使用する場合と使用しない場合のRedHatLinuxにリポジトリを追加する方法

  3. Linux RHEL 8 /CentOS8にapachetomcatをインストールする方法