• nginx配置反向代理支持session


     Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意;今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法正常进行了。

    问题描述: 登录后. 跳转http://127.0.0.1:8080/api/index.do 可以正常访问

                  nginx 反向代理 proxy_pass  http://192.168.1.12:8080/api/ 登录之后跳转   http://api.tomas.com/index.do 没有带过去cookie 导致拦截跳转登录页

    原因分析: 关键在于tomcat 中的应用context 路径是 /api , 而nginx代理后访问 context 路径是 / , JSESSIONID 的值从浏览器经过反向代理到达tomcat时, 由于cookie时内外路径不一致, 使tomcat每次重写设置 JSESSIONID 的值,导致session丢失现象.

    之前nginx.conf 配置如下:

    server{

       listen 80;
       server_name api.tommas.com;
       location / {
                proxy_pass   http://192.168.1.12:8080/api/;
                proxy_set_header   Host    $host;
                proxy_set_header   Remote_Addr    $remote_addr;
                proxy_set_header   X-Real-IP    $remote_addr;
                proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;
            }

    而后检查是由于cookies path问题导致,阅读官方资料中显示proxy_cookie_path,遂调整

    server{

       listen 80;

       server_name api.tommas.com;

       location / {

                proxy_pass   http://192.168.1.12:8080/api/;

               #proxy_pass  代理 (包含项目名)的url时 注意cookie的Path

                proxy_cookie_path /api/ /;

                proxy_set_header   Host    $host;

                proxy_set_header   Remote_Addr    $remote_addr;

                proxy_set_header   X-Real-IP    $remote_addr;

                #proxy反向代理header 有可能经过了多级nginx代理 想取原始IP(多个取第一个是原始IP 其余的为代理ip)

                proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;           

            }

    }

    测试 解决问题。

    参考资料: http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path

    nginx 配置写法方式二: 

    加上路径转换:proxy_cookie_path  /project /proxy_path;

    则可以将project的cookie输出到proxy_path上。正确的配置是:

        location /proxy_path {
            proxy_pass   http://127.0.0.1:8080/project;
            proxy_cookie_path  /project /proxy_path;
        }
     
  • 相关阅读:
    【leetcode】1534. 统计好三元组
    【leetcode】1351. 统计有序矩阵中的负数
    【leetcode】1523. 在区间范围内统计奇数数目
    【leetcode】204. 计数质数
    【leetcode】993. 二叉树的堂兄弟节点
    【leetcode】1598. 文件夹操作日志搜集器
    【leetcode】1389. 按既定顺序创建目标数组
    【leetcode】增减字符串匹配
    【leetcode】1185.一周中的第几天
    052-158
  • 原文地址:https://www.cnblogs.com/xiaolixun/p/8438840.html
Copyright © 2020-2023  润新知