2

さて、Tomcat(5.5)で実行されているWebアプリを、サイトのルートから(つまり、コンテキストなしで)提供するApache 2(正確には2.2.3)の背後で実行し、静的コンテンツをApache経由で提供したいと思います。

そのため、Tomcatでアプリが「/myapp」の下で実行されている場合は、代わりにapache(プラスmod_rewrite)を使用して、「」の下で実行されているかのように動作さ/せます。

Mod_jkセットアップと動作は正常です。「」からアプリにアクセスできます/myappが、最後の部分がうまく機能しません。以下は、これを機能させるために私が持ってmod_rewriteいる構成です。正しくリライト/static/URLを取得して、解凍されたWebアプリからapacheにサービスを提供します。リライトログを有効にすると、他のすべてのリクエストを/myapp経由に渡そうとしmod_jkます。ただし、mod_jkは後でリクエストを処理していないようです。


JkMount /myapp/*      worker1

RewriteEngine On

# ensure static stuff gets served by apache
RewriteRule ^/static/(.*)$ /var/lib/tomcat5.5/webapps/myapp/static/$1 [L]
# everything else should go through tomcat
RewriteRule ^/(.*)$ /myapp/$1 [L,PT]

過去にapache1でこれを行ったときは、mod_jk前にgetがロードされていることを確認する必要がありましたが、apache2mod_rewriteではこれを達成できないようです。他の人は通常どのようにこれを行いますか?

4

4 に答える 4

1

最終的にこれを機能させることができました。JkOption を次のように設定する必要があるようです。


JkOptions     +ForwardURICompat

次にmod_jk、書き換えられた URL を確認します。これが機能する理由は 100% 確実ではないことを認めなければなりませんが、古い形式の動作に戻っていると思います。誰かがこれを行うためのより良い/より正しい方法を教えてくれるなら、私は知りたい.

于 2008-10-16T13:27:40.643 に答える
1

mod_jk の代わりにプロキシに Apache を使用する方がよい場合があります。このようなもの:

ProxyPass /static/ http://localhost:8080/myapp/static/

于 2008-11-24T16:51:26.860 に答える
0

Tomcat 仮想ホストまたは別のホストに別のコネクタを使用し、ルート アプリケーションを ("/" で) デプロイし、別のコネクタまたは仮想ホストへの Apache mod_jk 転送をセットアップすると、何が起こるかがより簡単または透過的になる可能性があります。

注: これが必要になったとき、さまざまな tomcat ホストまたはエンジン (思い出せません) 用のさまざまなコネクタを使用し、ROOT アプリケーションをデプロイしました。Tomcat で仮想ホスト (名前ベース) を試したことはありませんが、これが機能すると推測しているだけです。

利点: パスの変換が不要なため、最初の展開から数か月後にインストールに変更を加える必要がある場合でも、理解しやすくなります。

正直、少し奇妙に感じますが、読みやすさの利点は私にとって非常に価値があります。

于 2008-10-19T20:43:14.163 に答える
-1

「PT」の代わりに「R」フラグを使用します。

RewriteRule ^/(.*)$ /myapp/$1 [L,R]

編集: ユーザーに表示される URL を変更しないという点を見逃しました。別の方法は次のとおりです。

JkMount /* worker1
JkUnmount /static/* worker1

そうすれば、RewriteRule は必要ありません。

また、Apache Tomcat Siteによると、 の新しいデフォルト設定はmod_jkと互換性がないため、mod_rewriteを使用する必要があります+ForwardURICompatUnparsed

于 2008-10-16T12:49:05.137 に答える