- PR -

ApacheTomcat連携に関する不可解な点

投稿者投稿内容
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-06-10 13:16
こんにちわ。

以前Tomcat3.xとApache1.3.xとの連携をmod_jkを使用して
構築した経験があります。

それ以降あまり触っていなくて、久しぶりに時間ができたので
以下の環境を構築してみました。
・WindowsXP pro
・j2sdk1.4.0_03
・apache2.0.46
・tomcat4.1.12
・mod_jk2-2.0.43

webに転がっている情報を参考にしてやってみました。
起動・確認はうまく行きました。

しかし、ここで疑問が生じました。

ほとんどのページにおいて、「連携できたかどうかの確認方法」
として以下にようなことが書かれています。

『http://localhost/examplesにアクセスしてこの画面が見えること』
※この画面、というのは以下のURLにあるような最後の画像です。
http://ltm.cs.uec.ac.jp/~mutuki/server.html


そもそも、なぜapacheとtomocatを連携させるのかについて
僕は以下の要因が絡んでいると認識しています。
#他スレッドでもありましたね
・Tomcatの静的コンテンツにおける処理能力が非常に乏しい
・TomcatにはApacheにあるような豊富な機能がない

しかし、上記URLでの確認画面は明らかにtomcatが静的コンテンツ
を処理しているように見えるのです。

本来であれば、確認画面としては
http://localhost/examples
にアクセスするとapacheのディレクトリ一覧表示画面
になるべきなのではないでしょうか?

そして、
http://localhost/examples/servlet/*
http://localhost/examples/*.jsp
等で初めてtomcatが動くべきなのではないでしょうか?

僕のこの認識は間違っているのでしょうか?
#そもそもこの確認画面でtomcatが静的コンテンツを処理
#しているという認識自体間違っているとか

なんか、webで参考になるサイト探してたのですが
みんなこんな感じで、自分が間違っているのかと
疑問に思ったので質問してみました。


単なるURLマッピングの設定だけの問題で
workers2.propertiesあたり触れば
apacheのディレクトリ一覧表示画面になるかなと
遊んでいるのですがなかなかうまく行かず
悩んでいる所でもあります・・。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-06-10 18:22
workers2.propertiesで

 [uri:/examples/*]
 worker=ajp13:localhost:8019

こんな感じに書いてあるのですよね? たぶん。
素直に読めば /examples/* へのリクエストをすべて
mod_jk2 が処理するわけで、当然その先の処理はTomcatが
行います。

ということで、

> しかし、上記URLでの確認画面は明らかにtomcatが静的コンテンツ
> を処理しているように見えるのです。

ここは別に静的なコンテンツの処理ではないでしょうけれど、
ここがindex.htmlだったりすると結局Tomcatが静的コンテンツの
処理をすることになります。

> 本来であれば、確認画面としては
> http://localhost/examples
> にアクセスするとapacheのディレクトリ一覧表示画面
> になるべきなのではないでしょうか?
>
> そして、
> http://localhost/examples/servlet/*
> http://localhost/examples/*.jsp
> 等で初めてtomcatが動くべきなのではないでしょうか?

最初に示した設定から、「apacheのディレクトリ一覧表示画面になるべき」
ではないですし、「〜等で初めてtomcatが動くべき」でもないですね。

mod_perlなんかの*.cgiへのリクエストだけをトラップする
形態と違っているので妙に違和感を持った覚えがありますが
Webアプリケーションとしては、静的コンテンツもセットにして
管理すべきでしょうから、こんな感じでよいのかも、と思っています。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-06-11 09:05
こんにちわ。返信ありがとうございます。

引用:

まりりさんの書き込み (2003-06-10 18:22) より:
workers2.propertiesで

 [uri:/examples/*]
 worker=ajp13:localhost:8019

こんな感じに書いてあるのですよね? たぶん。
素直に読めば /examples/* へのリクエストをすべて
mod_jk2 が処理するわけで、当然その先の処理はTomcatが
行います。

ということで、

> しかし、上記URLでの確認画面は明らかにtomcatが静的コンテンツ
> を処理しているように見えるのです。

ここは別に静的なコンテンツの処理ではないでしょうけれど、
ここがindex.htmlだったりすると結局Tomcatが静的コンテンツの
処理をすることになります。



ということなんですよね。僕の認識は間違ってはいないと
いうことで安心しました。


引用:

最初に示した設定から、「apacheのディレクトリ一覧表示画面になるべき」
ではないですし、「〜等で初めてtomcatが動くべき」でもないですね。




これは僕の主観が入りまくっていることは確かですが。

ただ、「じゃあなんでいちいち連携するんだろう?」
って単純に思っちゃうわけです。

apacheに関して詳しくは知りませんが、たいていのwebアプリを
Apache-Tomcatで構築する場合、Apacheがなければできないこと
を組み込みますか?

それよりも、一番の要因はやはり性能面から静的ファイルはApache
にまかせるという認識のもと連携させているのかな、と思っていたのです。


少なくとも、以前のtomcat3.xとapache1.3.xとを連携させるために
学習してた時はwebの参考ページにも静的ファイルはApacheが処理する
ような設定にしよう、というのが多く見受けられました。
#これ自体すでに僕の勘違いか・・


では、皆さんに逆にお聞きしたいのですが
静的ファイルもTomcatが処理することを前提として

「なぜApacheと連携させるのでしょうか?」
R-55
常連さん
会議室デビュー日: 2003/03/13
投稿数: 29
投稿日時: 2003-06-11 09:31
ApacheはJavaではないためすべてをTomcatでVM上で処理するのと比べ
負荷分散ができるということらしいです。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-06-11 10:10
引用:

R?55さんの書き込み (2003-06-11 09:31) より:
ApacheはJavaではないためすべてをTomcatでVM上で処理するのと比べ
負荷分散ができるということらしいです。



こんにちわ。

でも静的ファイルもtomcatで処理させるってことは
全ての処理をTomcatにさせるってことと同意だと思うのですが。
違うのでしょうか?

全てをTomcatにやらせたのでは結局負荷分散
も意味ないんじゃないのかなぁって思うんですが。。



ちょうど@ITでも記事を発見したので出します。
http://www.atmarkit.co.jp/fjava/rensai2/jspservlet03/jspsevlet03_5.html

僕が感じる一番の違和感は、どのページでも
workers2.properties
[uri:/examples/*]

で、/examples/を閲覧した時に上記URLにあるような画面になれば
連携できました、で終わっていることです。

確かに「連携」はできていると思います。

これを見た、初めてApache-Tomcatを勉強する人は
このまま独自コンテキストも「連携」させて
「連携できました!」と言うのではないでしょうか?

何度も言いますが、「連携」はできているんです・・。
でもこのままだと連携させている意味薄くないですか?と。

本来であれば、
workers2.properties
[uri:/examples/servlet/*]
[uri:/examples/*.jsp]

とかにして、あとはapacheのコンフィグいじって
*.htmlとか*.gifとかはApacheに
その他動的ファイルへはTomcatに仕事「させた方が良い」ですよ
くらいの言及はあってもいいんじゃないのかなぁって感じたのです。

R-55
常連さん
会議室デビュー日: 2003/03/13
投稿数: 29
投稿日時: 2003-06-11 10:29
ああ、そういうことでしたか。
すいません、勘違いしてました。
確かにそうですね。

静的コンテンツと動的コンテンツはフォルダレベルで分けるということなら

workers2.properties
[uri:/examples/*]

でもいいかなとは思いますが、それにしても説明くらいは欲しいですね。
ちなみに僕は入門書見ながらテストしてたときはTomcatだけしか使いませんでした。
それで十分だと思うのですが。
呂布
会議室デビュー日: 2003/03/07
投稿数: 16
お住まい・勤務地: Tokyo
投稿日時: 2003-06-11 13:13
ぽちさん、まりりさん、R−55さん、こんにちは。

この議論について返答を書いていたところ、SUNの思想やらJ2EE仕様やらLinux/UNIXの歴史やら…いろんな点で言いたいことが沢山でてきてしまって書ききれないので、途中でやめました。

ぽちさんの葛藤、手に取るように分かりますので、ぽちさん、ご安心を。SEはみんな、同じように怒っています。

引用:

では、皆さんに逆にお聞きしたいのですが 静的ファイルもTomcatが処理することを前提として
「なぜApacheと連携させるのでしょうか?」



普通の人:「その方がいいと書いてあった」「URLのホスト名に":8080"って付けなくてもよくなるからじゃないの」そうですね、8009番やUNIX Domainソケット使うことで、内部的に処理されますもんね。というか、こうしないと運用できないよね。
管理者の設定:静的ファイルは全てApacheに処理させる。というより、J2EEコンテキストへのリクエストのみTomcatに処理させる、という風に考える。どう考えても、こうあるべきですよね。でも、ぽちさんのいうようにもう一ひねりした設定が必要になるわけですが。

ともかく国内において、@ITのように頼れるサイトですら、まじめに考えていないことが問題です。
他のサイトも、本家Jakarta Tomcatの抜粋転載はやめてくれ、と言いたい。

ぽちさんのように考えることができる人はまだまだ少数で、ほとんどの人は「意味も分かってない」です。これは、この国だけ?韓国・米国の事情が気になるところですが、友達いないので。っていうか、友達一人もいないので。

なんかコミュニティを立ち上げる必要があるな、と日頃から考えておりました。

ちなみにぽちさん、
引用:

apacheのディレクトリ一覧表示画面になるかなと
遊んでいるのですがなかなかうまく行かず
悩んでいる所でもあります


ですが、Tomcatが生成するディレクトリ一覧が出てしまっているということでしょうか?
だとしたら、CATALINA_HOME/conf/web.xmlのlistingsという記述を探してください、初期状態でtrueになってますので。
おっと、これがまたポチさんの葛藤の追い風に…
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-06-11 16:00
こんにちわ。

引用:

ぽちさんの葛藤、手に取るように分かりますので、ぽちさん、ご安心を。SEはみんな、同じように怒っています。



皆さんがどう感じているのかはわかりませんが、
少なくとも僕の疑問は僕だけのものではなかった
という点に関してほっとしました。


引用:

普通の人:「その方がいいと書いてあった」「URLのホスト名に":8080"って付けなくてもよくなるからじゃないの」そうですね、8009番やUNIX Domainソケット使うことで、内部的に処理されますもんね。というか、こうしないと運用できないよね。
管理者の設定:静的ファイルは全てApacheに処理させる。というより、J2EEコンテキストへのリクエストのみTomcatに処理させる、という風に考える。どう考えても、こうあるべきですよね。でも、ぽちさんのいうようにもう一ひねりした設定が必要になるわけですが。



僕も実際にjavaに触れて丸2年(それ以前のプログラミング経験はないです)
経ちますが、当初Apache-Tomcatに触れた時はまさに上記でいう前者でした。

ドキュメント自体少なかったですし、英語を得意としていないため
頼れるのは主にwebでした。

その中ではたいていが、「連携方法」について記述していましたが
「なぜ連携するのか?」についてはあまり触れらていなかったです。

当時、と言っても1年ほど前ですが、webでTomcatは静的ファイルの処理は
不得意なのでApacheに静的ファイルの処理をさせるというような記述を
見つけ、なるほどと思いました。
#どの程度不得意かはわかっていませんでしたが


しかし、久しぶりにtomcatをいじってみると、なぜかwebに転がっている
情報はそのことには触れておらず、ましてや「連携方法」の設定として
制的ファイルをtomcatに処理させるような設定を紹介していました。

なんじゃこりゃ?と思ったんですね。
あまりにもそういう情報が過多であったため、僕自身の認識が間違って
いるのかもしれない。確認せねば、ということでココに至ったわけです。


引用:

Tomcatが生成するディレクトリ一覧が出てしまっているということでしょうか?
だとしたら、CATALINA_HOME/conf/web.xmlのlistingsという記述を探してください、初期状態でtrueになってますので。
おっと、これがまたポチさんの葛藤の追い風に…



これについては自己解決しました。

もともと何に悩んでたかというと

workers2.properties
[uri:/myapp/servlet/*]
[uri:/myapp/*.jsp]

という設定にしておけば、例えば以下のURL
http://localhost/myapp/
をコールした時見える画面としては

http://www.apache.org/dist/

こんな感じの「Apache」の画面になると思ってたんですが
なぜか

僕が最初の投稿でも紹介したtomcatのディレクトリ一覧画面
が表示されていたのです。

それで、なぜここでtomcatが処理してんだ?ってなわけです。


原因としては
myappに仮想ディレクトリの設定をした際
コード:
<Directory "C:/tomcat4.1/webapps/myapp">
    Options Indexes FollowSymLinks
    DirectoryIndex index.jsp index.html index.htm 
</Directory>



のようにしてたんですが、DirectoryIndexでindex.jspを指定
してたのがマズかったみたいです。

おそらくApacheが処理する際、まずDirectoryIndexを探すため
に各ファイルにアクセスするんだろうと思います。

そうすると当然index.jspにアクセスしようとした時に
*.jspなんでtomcatに処理が遷移しちゃいますよね。

index.jspを削除することで解決しました。

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