EXist-dbをベースにしたアプリケーションがあります。基本的には、Jettyを使用するJava Webアプリケーションです。Apacheプロキシの背後にあるリモートLinuxサーバーで実行されます。
次のApache構成を使用します。
ServerName domain.com
ProxyRequests off
ProxyPass /myapp http://localhost:8899/exist/apps/myapp
ProxyPassReverse /myapp http://localhost:8899/exist/apps/myapp
セッション以外はすべて正常に動作します。リクエストごとに、セッションが更新されます。これは、リクエストのCookieヘッダーにJSESSIONID
が含まれていないが、レスポンスのSet-CookieヘッダーがJSESSIONID=oryq5odyt3f79xxax25n7x0h;Path=/exist
のようなものであることを意味します。また、アプリケーションでセッションIDをチェックして、セッションが毎回新しいことを確認します。
私は3つのテストシナリオを試しました:
テストシナリオA:
テストシナリオB:
テストシナリオC(ローカル):
この問題はシナリオAとBの両方で発生しますが、Cでは発生しません。
セッションを機能させる方法について何かアイデアはありますか?
次のApache構成で問題が解決します。
ServerName domain.com
ProxyRequests off
ProxyPass /myapp http://localhost:8899/exist/apps/myapp
ProxyPassReverse /myapp http://localhost:8899/exist/apps/myapp
ProxyPassReverseCookiePath /exist /
Cookie内のパスを/exist
から/
に変更して、セッションがパスに適切にマップされるようにします。
場合によっては、Cookieのドメインを変更するために、次のディレクティブが必要になることがあります(ただし、私の場合は必要ありませんでした)。
ProxyPassReverseCookieDomain localhost domain.com
stackoverflow でさらに詳細を見つけました。