@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Apache2+Tomcat6の連携における階層コンテキストの設定

1
投稿者投稿内容
timanis
会議室デビュー日: 2007/11/12
投稿数: 2
投稿日時: 2007-11-12 20:01
はじめまして。
Apache2とTomcat6の連携について質問です。

(1)の環境から、(2)の環境へアプリケーションを移行したいと思っています。

-----
(1)
Windows 2000 Server
Apache 2.0.54
mod_jk 1.2.14
Tomcat 5.0.28

(2)
Windows Server 2003
Apache 2.2.6
mod_jk 1.2.23
Tomcat 6.0.13
-----

(1)においては、適切なworkers.propertiesを用意して、
Apacheのhttpd.confに以下のようにJKMountディレクティブを宣言。

JkMount /foo/bar/* worker1
JkMount /foo/bar worker1

JkMount /hoge/* worker1
JkMount /hoge worker1

{appBase}下に"bar"、"hoge"アプリケーションを配備、
Tomcatのserver.xmlを以下のように設定すれば、

<Context path="/foo/bar" docBase="bar">
<Context path="/hoge" docBase="hoge">

それぞれ

http://xxx/foo/bar/
http://xxx/hoge/

というURLで動作しておりました。

ところが、(2)の環境に移行したところ、
Tomcat起動時に以下のメッセージが出力され、
http://xxx/foo/bar/ を参照しても404エラーになります。
「警告: A docBase C:\\xampp\\tomcat\\webapps\\bar inside the host appBase has been specified, and will be ignored」
(http://xxx/hoge/ のほうは問題なく動作します。)

移行にあたり、/conf/server.xmlから<context>の切り出しは行っています。

/conf/server.xml

/conf/{Engine}/{Host}/bar.xml
/conf/{Engine}/{Host}/hoge.xml

過去の記事 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=40342&forum=12
などを拝見するに、URLと配備先パスが異なる場合の連携は保証されていないようです。
また実運用でも推奨されていないみたいですね…。
コンテキストルートを"/foo/bar"のような階層にしたい場合、
どのような方法が一般的なのでしょうか?
ご教授頂ければ幸いです。
timanis
会議室デビュー日: 2007/11/12
投稿数: 2
投稿日時: 2007-11-30 16:24
自己解決しましたので参考までに。

●Apache
まずmod_jkの使用をやめ、mod_proxyを使うことにしました。
/conf/httpd.conf で以下をコメントアウト。

 LoadModule proxy_module modules/mod_proxy.so
 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

/conf/extra/httpd-proxy.conf を追加して以下のように記述。

 <Location /foo/bar/>
  ProxyPass ajp://localhost:8009/foo/bar/
 </Location>

●Tomcat
/conf/{Engine}/{Host}/foo#bar.xml を追加して以下のように記述。

 <Context path="/foo/bar">
 (以下省略)

アプリケーションを /webapps/foo/bar/ に配置することで動作しました。
コンテキストルートが階層になっているときは、
context.xmlを"[階層1]#[階層2].xml"のように書くようです。
1

スキルアップ/キャリアアップ(JOB@IT)