質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

apacheとtomcatをAJP連携させた際にセッションを維持する方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 3,277

score 20

前置き

apacheとtomcatをAJP連携させた際に、セッションIDが維持されない現象に遭遇しております。

やりたいこと

apacheに対するhttp://www.hoge.com/以下へのリクエストをAJP連携したtomcatに飛ばす。
その際、セッションが正しく維持されること。

前提条件

AJP連携の設定は、httpd.confとは別に下記のファイルにLocationタグを掘って記載しています。

  • ファイル名:/etc/httpd/conf.d/mod_ajp_proxy.conf
  • 設定内容:
<location />
    ProxyPass ajp://localhost:8009/TestApp/
</location>


※ 補足①:TomcatにはTestAppという名称のアプリ(war)を配備しています。
※ 補足②:上記設定でhttp://www.hoge.com/ へアクセスした際の挙動は、TestAppのTopページが表示され、AJP連携ができていることを確認しております。しかし、Google開発者ツールでCookieを確認すると、JSESSIONIDが入っておらず、セッション維持ができておりません。

試したこと①

このサイト を参考に、アクセス用のURLをWebアプリケーション名と完全に一致させる というやり方を試してみました。

  • mod_ajp_proxy.conf の設定
<location /TestApp>
    ProxyPass ajp://localhost:8009/TestApp/
</location>


これで「http://www.hoge.com/TestApp」のようにアクセスすると、
JSESSIONIDがCookieに設定され、他の画面に遷移してもセッションが維持されることを確認しました。

しかし、「http://www.hoge.com/」でアクセスできるようにしたいため、以下へ続きます。

試したこと②

このサイト と現象が同じため、参考にさせていただいております。

  • 以下の設定は、サイトからの引用です
<Location /tomcat/>
  ProxyPass ajp://localhost:8009/ keepalive=on
  ProxyPassReverse ajp://localhost:8009                 
  ProxyPassReverseCookiePath / /tomcat/
</Location>

この方は、apacheに対する「http://www.hoge.com/tomcat/」以下へのリクエストをAJP連携したtomcatに飛ばす、という要件で設定をされております。

私の場合は、「http://www.hoge.com/」以下へのアクセスで、AJP連携したtomcatに飛ばす、という要件です。

私の要件を踏まえて、読み替えながらいろいろ設定したのですが、頭がこんがらがってきて質問をさせていただいた次第です...。

すみませんが、何卒よろしくお願い申し上げます<(_ _)>

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yu_1985

    2020/05/16 21:05 編集

    locationディレクティブでの指定にしている理由はなにかあるのでしょうか。

    また、そもそものhttpd.confの設定はどうしていますか?
    具体的にはDocumentRootの設定が気になります。

    キャンセル

  • ami613

    2020/05/16 21:59

    ご回答ありがとうございます!!

    > locationディレクティブでの指定にしている理由はなにかあるのでしょうか。
    理由ですが、実は特にないです。。。
    調べていて、ヒットしたサイトを参考にしました。
    もしやこの記述法は、あまり一般的ではないのでしょうか?

    > また、そもそものhttpd.condの設定はどうしていますか?
    > 具体的にはDocumentRootの設定が気になります
    DocumentRootですが、下記のようになっておりました。
    「DocumentRoot "/var/www/html"」
    ここはデフォルトのまま変更をしておりませんでした。

    以下、おかしなことを言っていたらすみません...!
    私はてっきり、ApacheとTomcatを連携する場合は、
    Tomcat側で画面表示までやってくれるので、
    DocumentRootは使用しないという認識でおりました。

    DocumentRootも何か設定が必要でしたでしょうか?
    質問ばかりで大変恐縮ですが、何卒よろしくお願い致します<(_ _)>

    キャンセル

回答 2

checkベストアンサー

+1

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/18 10:26

    すみません、最後に一つだけ質問させてください...!

    > Tomcatルートにアプリケーションをデプロイ
    上記サイトの「4. server.xml でコンテキストパスを指定する」のやり方が良さそうだなと思っているのですが、この設定を行う場合、ProxyPassReverse や ProxyPassReverseCookiePath の設定は不要である、という認識で合っているでしょうか...??

    キャンセル

  • 2020/05/18 11:05

    https://httpd.apache.org/docs/2.4/ja/mod/mod_proxy.html#proxypassreverse の記載通りパスを調整するためにあるので

    パスを tomcat 側で調整したので不要となる

    キャンセル

  • 2020/05/18 12:08

    ご確認&ご回答ありがとうございます<(_ _)>
    ApacheやTomcatは本当に無知だったのですが、質問を通じてすこしずつ知識が身についたように感じております。
    この度は大変勉強になるご回答と頂き、本当にありがとうございました<(_ _)>

    キャンセル

+1

試していないのですが、ざっと見た感じでは、以下の設定で良いのでは?
<location />
ProxyPass ajp://localhost:8009/TestApp/
ProxyPassReverse ajp://localhost:8009/TestApp/
ProxyPassReverseCookiePath /TestApp/ /
</Location>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/18 10:18

    YT0014様、asahina1979様

    お世話になっております。

    >「JSESSIONID」という名前でCookieに値が設定されるもの、と思い込んでおりました
    > 今回は「SESSION」という名前でCookieに残っていたのですが、
    この私の発言についてですが、原因が判明しました。

    参考:https://macchinetta.github.io/cloud-guideline/current/ja/ImplementationAtEachLayer/SessionManagement.html
    > Servlet仕様では、セッションIDを示すHTTP Cookieの名称は、「JSESSIONID」だが、Spring Sessionを使用した場合のデフォルトは「SESSION」となる。

    現在私はセッション層を外部に切り出すことも検証しており、SpringSessionを使用しておりました。
    なので、Cookieに設定されるkeyが「SESSION」になっていたようです。
    良く調べもせず、お騒がせして申し訳ございませんでした<(_ _)>

    キャンセル

  • 2020/05/18 14:09

    情報ありがとうございます。事実が判明して、こちらとしても、参考になりました。最初に適当な憶測を述べて申し訳ございませんでした。

    キャンセル

  • 2020/05/18 14:42

    とんでもないです!
    ご回答いただき誠にありがとうございました!<(_ _)>

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る