Apache と Tomcat で mod_proxy_ajp を使用するにはどうすればいいですか?

Apache と Tomcat で mod_proxy_ajp を使用するにはどうすればいいですか?

RHEL 5 サーバー上で Apache と Tomcat を実行し、Apache で Ruby on Rails アプリ (mod_rails/Passenger 経由) を処理し、Tomcat で Java アプリを処理したいと思います。

Apache では、各 Rails アプリに URL と vhost があります。URL は、マシンを指すように DNS サーバーですでに設定されています。

ourserver.ourcompany.com/app1Tomcat では、各 Java アプリには、、ourserver.ourcompany.com/app2などの URL があります。

サーバーはすでに稼働しており、Tomcat 6 がポート 80 で実行され、いくつかの Java アプリを提供しています。Apache を追加して再構成したいと考えています。Passenger を使用して RoR アプリをホストするために単一の Apache サーバーを構成する方法はよく知っています。ただ、Apache と Tomcat をそのように連携させる方法がわかりません。

Google検索でさまざまなリソースや議論を見つけました(たとえば、これです) ですが、それらは少々不完全で不完全な傾向があり、私がやろうとしていることとはあまり一致していないようです。私がリンクしたものは、特定のリクエストだけでなくすべてのリクエストを Tomcat に送信し、その他は Apache で処理したい場合のためのもののようです。

server.xmlおよびの設定例を提案していただけますかhttpd.conf? あるいは、より詳細なリソースを教えていただけませんか?

答え1

server.xmlTomcat をデフォルトのポートに戻して Apache がポート 80 を処理できるようにする以外は、に変更を加える必要はありません。作業の大部分は Apache 構成ファイルを通じて行われます。私は通常、これらを の外部に残し、代わりにサブディレクトリhttpd.confの下の小さな構成スニペットに挿入します。<ServerRoot>/conf.d/

ourserver.ourcompany.com/app1&の例を考慮すると、ourserver.ourcompany.com/app2次のような構成を想定します。

<VirtualHost *:80>
    ServerName ourserver.ourcompany.com
    ErrorLog ...
    CustomLog ...

    [other VHost configurations]

    ProxyPass /app1 ajp://tomcat_hostname:8009/app1
    ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1

    ProxyPass /app2 ajp://tomcat_hostname:8009/app2
    ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
</VirtualHost>

複数のTomcatサーバーがクラスター化されている場合は、mod_balancerを設定してajp://mod_balancer BalancerMemberを、balancer://バランサー構成を参照する URL に置き換えます。

答え2

私は個人的に mod_proxy_ajp が好きではありません。Apache で Tomcat を実行するときは、AJP 接続を提供するために mod_jk (Tomcat コーダーのモジュール) をすぐにインストールします。mod_jk は、アプリケーションのパフォーマンス (スレッド、タイムアウト、ノックなど) に合わせて 5 つの方法で調整できます。

  1. httpd-develがインストールされていることを確認してください
  2. 実際の JDK を /usr/local/jdk1.6.0_18/ などのパスに解凍します。
  3. tomcat.apache.orgから「tomcat-connectors」ソースを取得し、コンパイルします。

    tomcat-connectors-1.2.28-src/native をCDに追加します。

    ./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork

    作る

    apache-2.0/mod_jk.so を /usr/local/lib/ にコピーします。

次に、これを一般的な意味で Apache 構成にプラグインし、必要に応じて各仮想ホストにプラグインする必要があります。全体的な構成では、次のような内容を追加します。

LoadModule jk_module /usr/local/lib/mod_jk.so
JkWorkersFile  /usr/local/tomcat/conf/workers.properties
JkShmFile      /var/log/httpd/mod_jk.shm
JkLogFile      /var/log/httpd/mod_jk.log
JkLogLevel     error

基本的な worker.properties ファイルを作成する必要があります。ドキュメントは次のとおりです。参考文献非常に基本的なものは以下のようになります。

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk1.6.0_18
ps=/
worker.list=ajp13
worker.maintain=60
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13

これは server.xml のデフォルトのポート 8009 構成を使用します。ここでは、パフォーマンスを無限に調整するために調整できるノブが無数にあります。次に、各仮想ホストで必要なアプリを「マウント」します。

<VirtualHost *:80>
 ServerName foo.bar.com
 ...other options ...

 JkMount /app1/* ajp13
 <Location "/app1/WEB-INF/">
    deny from all
 </Location>

 JkMount /app2/* ajp13
 <Location "/app2/WEB-INF/">
    deny from all
 </Location>

</VirtualHost>

一番下に記載されているように、セキュリティを少し忘れずに、WEB-INF フォルダーへのすべてのアクセスを拒否してください。ほとんどの Web アプリケーションは、ウォーボールとしてデプロイされるときに、パスワード web.xml 付きのデータベース DSN を持っています。

関連情報