web-dev-qa-db-ja.com

ApacheおよびTomcatでmod_proxy_ajpの使用を設定するにはどうすればよいですか?

ApacheとTomcatをRHEL5サーバーで実行し、ApacheがRubyアプリ(mod_Rails/Passenger経由)でRailsを処理し、TomcatがJavaアプリを処理したい。

Apacheでは、各RailsアプリにURLと仮想ホストがあります。 URLは、マシンを指すようにDNSサーバーで既に構成されています。

Tomcatでは、各Javaアプリには次のようなURLがあります:ourserver.ourcompany.com/app1ourserver.ourcompany.com/app2など。

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

グーグルでさまざまなリソースやディスカッションを見つけましたが(たとえば、 これ )、少し大雑把で不完全な傾向があるか、私がやろうとしていることと実際には一致していないようです。 。私がリンクしたものは、特定のリクエストだけでなく、すべてのリクエストをTomcatに送信し、Apacheに他のリクエストを処理させる場合のためのもののようです。

誰かがserver.xmlhttpd.confの設定例を提案したり、もっと詳細なリソースを教えてくれませんか?

5
Agvorth

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

ourserver.ourcompany.com/app1ourserver.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_balancerBalancerMemberに移動して、balancer://に置き換えることをお勧めします。バランサー構成を参照するURL。

5
Jeremy Bouse

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

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

    cd Tomcat-connectors-1.2.28-src/native

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

    make

    cp 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ファイルを作成する必要があります。ドキュメントは次のとおりです。 http://Tomcat.Apache.org/connectors-doc/reference/workers.html 非常に基本的なファイルは次のようになります。 :

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を持っています。

2
user15590