开发者社区> 问答> 正文

NginxTomcat域名下无法获取用户登录的sessian


            通过IP访问,登录成功可以获得Sessian ,但是配置到域名下后,能正常访问,就是登录后无法获取sessian ,提交登录的域跟当前访问的域是一样,后台控制台有打印登录成功的日志包括用户账号以及sessianid, 登录是ajax登录返回成功后刷新页面,页面头部的状态还是跟没登录前一样,页面获取sessian打印是空的!

           是不是我Nginx 配置错了,求各位帮忙! 先谢谢了

Nginx 配置:
    server {
        listen       80;
        server_name  www.域名.com 域名.com;
        access_log  /alidata/log/nginx/a.access.log  main;
        root   /usr/local/server/tomcat-8080/webapps/com.a/;
        
        location / {
            root html;
            index  index.jsp index.html index.htm;
            proxy_redirect          off;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size    10m;
            client_body_buffer_size 128k;
            proxy_buffers           32 4k;
            proxy_connect_timeout   3;
            proxy_send_timeout      30;
            proxy_read_timeout      30;
            proxy_pass http://127.0.0.1:8080/a/;
            rewrite ^/$ /index last;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }




展开
收起
aston008 2015-10-30 01:00:27 8947 0
2 条回答
写回答
取消 提交回答
  • 回1楼鬼才神兵的帖子
    ╮(╯▽╰)╭    , 犯了个低级错误! 可遇到这个问题吗!  

    -------------------------

    ReNginxTomcat域名下无法获取用户登录的sessian
    过IP访问,登录成功可以获得session,但是配置到域名下后,能正常访问,就是登录后无法获取session,提交登录的域跟当前访问的域是一样,后台控制台有打印登录成功的日志包括用户账号以及sessionid, 登录是ajax登录返回成功后刷新页面,页面头部的状态还是跟没登录前一样,页面获取session打印是空的!  

    -------------------------

    ReNginxTomcat域名下无法获取用户登录的sessian
    问题解决了
    nginx + tomcat 导致session丢失的问题

    niginx 在做反向代理的时候,如果代理的目录地址和用户访问的目录地址不在同一个层级下的时候,即
    server {listen 80;server_name www.bzf.com;location / {proxy_pass http://127.0.0.1:8090/sso;}}


    如上所示,若用户访问 www.bzf.com,则会被nginx代理到本地8090端口下的sso项目下,
    tomcat是通过cookie中的JsessionId来判断是否是一个新用户的,使用上述代理方式时,tomcat会将JsessionId写入www.bzf.com域名下的/sso路径下面。

    用户下次再访问 www.bzf.com 的时候,发送给服务器的请求拿不到 /sso 路径下的 JsessionId,因此tomcat 会一直认为是一个新用户,这从/sso 路径下的 JSessionId会一直变化也可以看到。
    上述分析表明,我们要让用户拿到它上次写入的JsessionId才可以,因为用户访问的域名是 www.dzf.com,这我们不能改变,因此应改变保存JSessionId的cookie的路径,将该路径变为 “/” 即可,这可通过nginx 的 proxy_cookie_path 来设置,将 tomcat 写入的 /sso 路径下的cookie 变为"/"路径下,添加两行代码如下:
    server {listen 80;server_name www.bzf.com;location / {proxy_pass http://127.0.0.1:8090/sso;proxy_cookie_path /sso/ /;proxy_cookie_path /sso /;}}
    http://www.thinksaas.cn/group/topic/277531/
    2015-10-30 09:24:54
    赞同 展开评论 打赏
  • 阿里云论坛版主,伪Linux运维,完美主义者。
    sessian是什么,应该是session吧!

    -------------------------

    回 4楼(aston008) 的帖子
    恭喜啊!问题解决了!我也涨姿势了!
    2015-10-30 04:19:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载