Tomcarサーバーにいくつかのアプリケーションがあります。プロキシにnginxを使用しているため、サブドメインからアプリケーションにアクセスできます
tomat:8080/app1 > app1.mydomain.com
tomat:8080/app2 > app2.mydomain.com
リバースプロキシを設定します。
server {
listen 80;
server_name app1.mydomain.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_pass http://Tomcat:8080/app1/;
}
}
問題なくアプリケーションにアクセスできます。しかし、セッションを維持することはできません。 ngixの背後で問題なく実行される桟橋の別のアプリケーションがあります。また、アプリケーションに直接アクセスすると、問題なく操作できます。
ヒントはありますか?
ありがとう。
この問題は、プロキシの場所のパスがTomcatアプリケーションのコンテキスト名と一致せず、リクエストごとに新しいJSESSIONIDを引き起こすCookieパスの不一致がある場合に発生することに気付きました。
以下に示すように、proxy_cookie_pathディレクティブを追加してみてください。
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_cookie_path ~*^/.* /;
proxy_pass http://Tomcat:8080/app1/;
}
スティッキーセッションまたはセッションアフィニティを有効にできます。これにより、同じクライアントからのリクエストが毎回同じTomcatに渡されるようになります
Nginxの変更:
スティッキcookie srv_id expires = 1h domain = .example.com path = /;
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky
私にとって、Diwakar Timilsinaによって提供された答えは、私の問題を解決した正確なものでした。
NginxがVHostのルートコンテキストに応答し、コンテキスト/アプリケーション内のTomcatのインスタンスに向けてリクエストをプロキシする
例えば:
http://hunt.pepe.com/index.jsp --> http://localhost:8080/hunt-app
追加した唯一のディレクティブは[proxy_cookie_path〜^ /。/;]でした:
location / {
·
·
proxy_cookie_path ~*^/.* /;
·
proxy_pass http://localhost:8080/hunt-app;
}
本当にありがとう、あなたは文字通り私のお尻を救った。