QA@IT

Linuxサーバーにて、tomcat上のプロジェクトが正常に稼働していない。

4017 PV

不慣れな初心者で申し訳ないのですが、お力添えを頂きたいので質問させて下さい。

現在自分のVPSにて、Apacheとtomcatを連携させた上でSAStrutsで作成したWEBアプリケーションを稼働させています。
Apacheとtomcatは連携の上で稼働し、自分で取得した独自ドメインをサーバーに向けています。
更にサーバーのルートにてtomcat上のWebアプリを表示させるところまでは問題はありません。
しかしWEBアプリのURL回りがおかしく四苦八苦しています。

症状としましては、稼働させたいアプリがexample、ドメイン名前がtestだとすると

http://test/
でWebアプリのindex.jspは表示するのですが、cssやjsその他テキストリンクなどは全て
http://test/example/
を起点として生成されてしまっている為に読み込めず、正常に動作しません。

仕方なく応急処置として、http://test/example のアドレスでも読み込めるように

/etc/httpd/conf.d/proxy_ajp.confを以下のように記述しています。

ProxyPass /example/ ajp://localhost:8009/example/

ProxyPass / ajp://localhost:8009/example/

※Apache起動時にアドレス重複の忠告が出ますが無視して行っている状態です。

以前までhttp://test/のみでWebアプリは正常に稼働していたのですが、
サーバー上のtomcatに別のプロジェクトを転送したところ上記のような症状に陥るようになりました。

既存のWebアプリに変更点は加えておらず、
一度サーバーを初期化して以前と同様の手順で設定し直したにも関わらず症状が治らず困っています。
どこか見直したほうが良い点や症状の原因等分かる方、力をお貸し下さい。よろしくお願いします。

回答

ProxyPass / ajp://localhost:8009/example/ の場合

uri = /css/main.cssajp://localhost:8009/example/css/main.css に飛ぶのは正常の動作です。

f:url("/css/main.css") が /example/css/main.css に変更されるのも正常な動作です。

mod_rewrite を利用して特定のパスもしくは特定のパス以外を [P] で飛ばすようにしましょう。

またこのリライトでは cokkie はそのままでは使えません。

編集 履歴 (1)

おそらく example.war を webapps へ配備しているのだと思います。そのWebアプリをhttp://test/ で公開したいのであれば、次の手順でできるはずです。

  1. example.warをROOT.war という名前にして配備(既存のROOT.warは使えなくなります)
  2. HTTPコネクタを有効にして、http://test:8080/ で動くことを確認
  3. HTTPコネクタを無効にして、/etc/httpd/conf.d/proxy_ajp.conf を次のように編集して AJPコネクタへつなげる
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。