ApacheとTomcatをRHEL5サーバーで実行し、ApacheがRubyアプリ(mod_Rails/Passenger経由)でRailsを処理し、TomcatがJavaアプリを処理したい。
Apacheでは、各RailsアプリにURLと仮想ホストがあります。 URLは、マシンを指すようにDNSサーバーで既に構成されています。
Tomcatでは、各Javaアプリには次のようなURLがあります:ourserver.ourcompany.com/app1
、ourserver.ourcompany.com/app2
など。
サーバーはすでに稼働しており、Tomcat 6はポート80で実行され、いくつかのJavaアプリを提供しています。 Apacheを追加して再構成したい。 Passengerを使用してRoRアプリをホストするように唯一のApacheサーバーを構成する方法に精通しています。 ApacheとTomcatをそのように連携させる方法がわかりません。
グーグルでさまざまなリソースやディスカッションを見つけましたが(たとえば、 これ )、少し大雑把で不完全な傾向があるか、私がやろうとしていることと実際には一致していないようです。 。私がリンクしたものは、特定のリクエストだけでなく、すべてのリクエストをTomcatに送信し、Apacheに他のリクエストを処理させる場合のためのもののようです。
誰かがserver.xml
とhttpd.conf
の設定例を提案したり、もっと詳細なリソースを教えてくれませんか?
Apacheがポート80を処理できるように、Tomcatをデフォルトのポートに戻す以外は、server.xml
に変更を加える必要はありません。作業の大部分は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_balancerBalancerMember
に移動して、balancer://
に置き換えることをお勧めします。バランサー構成を参照するURL。
私はmod_proxy_ajpが個人的に好きではありません。 ApacheでTomcatを実行しているときは、mod_jk(Tomcatコーダーのモジュール)をインストールして、AJP接続を提供します。アプリのパフォーマンス(スレッド、タイムアウト、ノックなど)に合わせて、mod_jkを日曜日に5つの方法で調整できます。
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を持っています。