Nginx+Tomcat出现session丢失问题

Nginx作为一个强大的Web服务器,有很强的功能。在Nginx+Tomcat是Java Web动静分离的很好模型。但是,今天在配置过程中,遇到了一个问题,就是无法登录。由于之前在配置Apache的过程中,遇到过类似的问题,所以我很快确定了是由于sessionId在cookies中引起。

那么,我们如何在Nginx中配置,以避免这样的事情呢?我是通过如下代码来解决的。

场景描述一下:

我有一个二级域名mvn.domain.com,以及一个web程序,部署到我的服务器中,访问地址为:http://localhost:8081/nexus,通过我的域名,我希望反向代理到我的本地地址中。由于,我在部署本地应用的时候,不是链接到根目录(即root),导致我的应用程序的sessionId存储在/nexus的path下。而当我成功后,mvn.domain.com中,找不到对应的sessionId信息,导致会话失效。

解决方法一:

域名使用mvn.domain.com/nexus,反向代理到http://localhost:8081/nexus,可以解决如上问题。配置如下:

location /nexus/ {
                proxy_pass    http://localhost:8081/nexus/;
                proxy_redirect  off;
                proxy_set_header        Host    $http_host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   Cookie $http_cookie;
                chunked_transfer_encoding       off;
        }
        location / {
                proxy_pass    http://localhost:8081/nexus/;
                proxy_redirect  http://localhost:8081/ http://mvn.domain.com/;
        }



解决方法二,

        location / {
                proxy_pass    http://localhost:8081/nexus/;
                proxy_redirect off;
                proxy_set_header        Host    $http_host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   Cookie $http_cookie;                 
                rewrite ^/nexus/(.*)$ /$1 last;
                proxy_cookie_path /nexus /;
                chunked_transfer_encoding       off;
        }

说明:
1. 通过proxy_pass 来确定对应目录的跳转
2. 在多层代理中,填充Header请求头(proxy_set_header)
3. 将应用中访问的nexus路径rewrite到根路径下。
4. 将cookie_path为/nexus设置到根路径下。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章