mod_rewriteをmod_jkにリクエストを渡し、アプリコンテキストを削除して、Tomcat 5.5をApache 2の背後で実行するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/208261

質問

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

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

Mod_jk がセットアップされ、正常に動作しています。 " / myapp "からアプリにアクセスすることはできますが、最後の作業がうまくいきません。以下は、 mod_rewrite がこれを機能させるための設定です。書き換えられた / static / のURLを正しく取得して、展開されたwebappから提供する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]

過去にApache 1でこれを行ったとき、 mod_rewrite の前に mod_jk がロードされていることを確認しなければなりませんでしたが、達成できないようですこれはApache 2の下にあります。他の人は通常どうやってこれをしますか?

役に立ちましたか?

解決

最終的にこれが機能するように管理しました。 JkOptionを次のように設定する必要があるようです:


JkOptions     +ForwardURICompat

そして mod_jk は書き換えられたURLを調べます。これがなぜ機能するのかを100%確信していないことを認めなければなりませんが、私はそれが古い振る舞いに戻っていると信じています。誰かがこれを行うためのより良い/より正しい方法を教えてくれるなら、私は知りたいです。

他のヒント

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

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

Tomcat Virtual Hostsまたは異なるホストに異なるコネクタを使用し、ルートアプリケーションを(" /"で)展開し、Apache mod_jk転送を異なるコネクタまたは仮想ホストに設定すると、どうなるかが簡単またはより透過的になる場合があります。

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

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

私は告白しますが、多少奇妙に感じますが、読みやすさのメリットは私にとって非常に価値があります。

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

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

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

JkMount /* worker1
JkUnmount /static/* worker1

その後、RewriteRuleは不要になります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top