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设置到根路径下。



转载于:https://my.oschina.net/u/161336/blog/317714

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值