QA@IT

標準的なAJP連携(Apache2.2+Tomcat6)のドメインルート設定について

10282 PV

度々、すみません。以前、質問させていただいたものです。

下記でそれぞれ、ご回答頂いたのですが、私の対処の仕方の考え方が根本的に間違っているのか、動作不備が起こります。

 ①Apache2.2とTomcat6のドメインルート設定
   http://qa.atmarkit.co.jp/q/3216?_nid=2073
 ②ApacheのRewriteRuleで除外URLを設定したい
   http://qa.atmarkit.co.jp/q/3223?_nid=2082

やりたい事は単純で、ローカルの開発環境で動作しているwarをサーバ環境であるルートドメインに動作させる事です。
正直、こんなにはまるとは思っていませんでした。。

アプリのルート: app
開発環境URL: http://localhost:8080/app/
サーバーURL: http://xxxx.com/
で同じ様に動作させたい!

上記の対応(下記、Apache側の設定)で、現状、動作上不備が確認できたのは、以下の点です。

1.JSP2.0タグを使うと、アプリのルート(app/)が出力され、相対パスがずれる。
 ①に該当。=> Rewriteで常に「 /app/ → / 」と書き換えればる事で対応。
        ※jsessionIdが付与される問題はカスタムタグを作成して対応。

2.Ajaxでパラメータが受けわたらない。
 ②に該当。=> AjaxのURLが「/app/ajax/xxxxx」と形式が決まっており、
        アドレスバーにもURLは表示されないので、除外する事で対応。

3.ActionFormでPostした値が受け渡せない。

4.開発環境では1つしかないJSESSIONIDがサーバでは複数存在する。
  画面上でAjaxを実行している為かもしれませんが。。

@Apache側の設定

●httpd/conf/httpd.confの編集。
<IfModule mod_proxy_ajp.c>            ←Ajax通信用に設定。
 <Location /app/>
  ProxyPass ajp://localhost:8009/app/
 </Location>
</IfModule>

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !^/app/ajax/(.*)$
 RewriteRule ^/app/(.*)$ /$1 [R]         ←JSP2.0タグ用に設定。
 RewriteCond %{REQUEST_URI} !^/app/ajax/(.*)$  ←Ajax通信用に除外設定。
</IfModule>
Include conf/extra/httpd-proxy.conf

●httpd/conf/extra/httpd-proxy.confの編集。
ProxyPass        / ajp://localhost:8009/app/   ←ドメインルート用に設定。
ProxyPassReverse / ajp://localhost:8009/app/
ProxyPassReverseCookiePath / /app/         ←Cookie用に設定。

一般的に本番環境では「ルートドメイン」となるWEBアプリは多いと思いますが、Apacheではどのように設定されているのでしょうか?上記、私が考えた対処法は普通ではないのでしょうか?

度々、同じ様な質問ばかりして申し訳ありません。
ご教示いただければ幸いです。

回答

自己レスです。

さんざん悩んでいましたが、こちらの設定記述が一番参考になるような気がします。
http://d.hatena.ne.jp/kamicup/20100515/1273913603

sessionIdが発行されるのはAJP連携のlocalhostアドレスのせいじゃないかと
悩んでいましたが、以下でAjax,FileUpload,セッション管理はOKのようです。
(アプリルートはやっぱり、Rewriteの設定が必要かと思いますが、カスタムタグを作って全て書き換えてしまったので、設定していません。)

<IfModule mod_proxy_ajp.c>
 <Location />
  ProxyPass ajp://localhost:8009/app/ disablereuse=On
  ProxyPassReverse http://www.realdomain.com/app/
  ProxyPassReverseCookiePath /app /
 </Location>
</IfModule>

これで終わりますように。。

編集 履歴 (0)

自己レスです。

あまりやりたくなかったのですが、JSSESIONIDを除去するカスタムタグで
ルートのアプリ「app/」もあれば、除去するようにし、以下のようにしました。

Ajaxもcookieも正常に取得できました。

@httpd/conf/httpd.conf
<IfModule mod_proxy_ajp.c>
 <Location />
  ProxyPass ajp://localhost:8009/app/ disablereuse=On
  ProxyPassReverse ajp://localhost:8009/app/
 </Location>
</IfModule>
ProxyPassReverseCookiePath / /app/

ただ、クッキーに保存されているJSSESSIONIDを見るとまだ複数生成されているようです。
そして、セッションの情報も取得できません。

WEBで調べたら、「disablereuse=On」を設定したら、階層別でもセッションを
引き継ぐと書いていたのですが、引き継がれていないようです。

原因について、お分かりになる方がいましたら、よろしくお願いします。

編集 履歴 (0)
ウォッチ

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