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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

5188閲覧

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

ami613

総合スコア20

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

2クリップ

投稿2020/05/16 00:42

編集2020/05/16 00:44

前置き

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に飛ばす、という要件です。

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/05/16 15:02 編集

locationディレクティブでの指定にしている理由はなにかあるのでしょうか。 また、そもそものhttpd.confの設定はどうしていますか? 具体的にはDocumentRootの設定が気になります。
ami613

2020/05/16 12:59

ご回答ありがとうございます!! > locationディレクティブでの指定にしている理由はなにかあるのでしょうか。 理由ですが、実は特にないです。。。 調べていて、ヒットしたサイトを参考にしました。 もしやこの記述法は、あまり一般的ではないのでしょうか? > また、そもそものhttpd.condの設定はどうしていますか? > 具体的にはDocumentRootの設定が気になります DocumentRootですが、下記のようになっておりました。 「DocumentRoot "/var/www/html"」 ここはデフォルトのまま変更をしておりませんでした。 以下、おかしなことを言っていたらすみません...! 私はてっきり、ApacheとTomcatを連携する場合は、 Tomcat側で画面表示までやってくれるので、 DocumentRootは使用しないという認識でおりました。 DocumentRootも何か設定が必要でしたでしょうか? 質問ばかりで大変恐縮ですが、何卒よろしくお願い致します<(_ _)>
guest

回答2

0

ベストアンサー

投稿2020/05/16 13:41

編集2020/05/16 14:07
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ami613

2020/05/16 14:03

ご回答ありがとうございます!! > Spring BootアプリケーションをOpenShiftにデプロイする この記事の内容で、実現することができました。 いろいろなやり方があるのですね...! また、「バーチャルホスト」という単語も初めて聞きました。 大変学習になります。ありがとうございました<(_ _)>
退会済みユーザー

退会済みユーザー

2020/05/16 14:06

タイトルはりつけまちがえてら・・・・
ami613

2020/05/18 01:26

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

2020/05/18 03:08

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

0

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

投稿2020/05/16 11:49

YT0014

総合スコア1708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ami613

2020/05/16 12:58

できました...! ありがとうございます! ご迷惑では無ければ、もう1つ素人的な質問をさせていただいてもよろしいでしょうか...? Java? Tomcat?でセッション管理をする際は、 「JSESSIONID」という名前でCookieに値が設定されるもの、と思い込んでおりました (曖昧なのですが、研修時だったかでどこかでそう聞いたような記憶がありまして...) 今回は「SESSION」という名前でCookieに残っていたのですが、 この名称はとくに気にしないで良いものでしょうか? お手数をお掛けし恐縮ですが、何卒よろしくお願い致します<(_ _)>
YT0014

2020/05/16 13:21

Tomcatの設定でも変更できますから、特に問題はないかと思います。 推測ですが、ローカルにはapache側で管理されているクッキーが保存されて、AJPで変換されているのではないでしょうか?
退会済みユーザー

退会済みユーザー

2020/05/16 13:39

tomcat の設定ファイル系( server.xml , contxt.xml web.xml 等 )で 名称変更してないのであれば tomcat のセッションではないよそれ・
YT0014

2020/05/16 13:47

念の為、確認です。 javaのセッションが維持できているのは、クッキーのチェック以外で確認して頂けているんですよね?
ami613

2020/05/16 14:01

YT0014様、asahina1979様 お二人とも大変学習になるご意見をいただき、誠にありがとうございます...!<(_ _)> YT0014様 はい、おっしゃるとおりで、 HttpSessionでセッションに値を設定→セッションから値を取り出して、値を画面に表示する、 というプログラムを組んでいて、値が画面に表示ができている=セッション維持ができていると認識しております。 その上で、Google開発者ツールを使用し、Cookieに設定されているkey:valueも確認しておりました...!
ami613

2020/05/18 01: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」になっていたようです。 良く調べもせず、お騒がせして申し訳ございませんでした<(_ _)>
YT0014

2020/05/18 05:09

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

2020/05/18 05:42

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問