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;
    }

 

nginx配置反向代理支持session的更多相关文章

  1. Nginx配置反向代理支持WebSocket

    http { #WebSocket代理配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { ...

  2. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  3. Linux - Nginx配置反向代理。

    Nginx配置反向代理. 准备两台服务器 http://192.168.70.66 http://192.168.70.62 设置正则匹配(192.168.70.66) vim /usr/local/ ...

  4. CentOS 7 安装 Nginx 配置反向代理

    Linux使用Nginx Yum存储库上安装Nginx,适用于Red Hat Enterprise Linux和CentOS系统. 1.添加设置Nginx Yum存储库 在CentOS中首次安装Ngi ...

  5. [笔记]nginx配置反向代理和负载均衡

    1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...

  6. nginx笔记 安装nginx 配置 反向代理 多虚拟主机

    1,检测linux上是否 通过yum安装了nginxrpm   -qi  nginx 2.安装nginx之前的依赖包yum install gcc patch libffi-devel python- ...

  7. nginx 配置反向代理,负载均衡实战解析

    前言:NGINX的反向代理和负载均衡是网站架构中经常用到的一种高并发,高可用的方案,下面我们直接实战操作,当然理论也是要的. 一.反向代理 过程:反向代理:客户端 一>代理 <一> ...

  8. nginx 配置反向代理和静态资源

    https://unit.nginx.org/integration/ 与NGINX集成 在NGINX后面安装单元 将NGINX配置为静态Web服务器,并在Unit前面配置反向代理. NGINX直接从 ...

  9. nginx配置反向代理详细教程(windows版)

    内容属于原创,如果需要转载,还请注明地址:http://www.cnblogs.com/j-star/p/8785334.html Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(I ...

随机推荐

  1. java常用检验接口control方式

    @Controller public class ItemController { @Autowired private ItemService itemService; @RequestMappin ...

  2. jQuery文档操作之删除操作

    remove() 语法: $(selector).remove(); 解释:删除节点后,事件也会删除(简言之,删除了整个标签) $("ul").remove(); detach() ...

  3. Linux 多线程按照线程顺序打印字符

    #include <stdio.h> #include <pthread.h> #include <unistd.h> ; pthread_mutex_t mute ...

  4. 2.1 MATLAB的数据类型

    2.1 MATLAB的数据类型 每种数据类型都是以矩阵的形式存在的 数据类型:数值型.字符型.元胞型.结构体.函数句柄 数值型包含:双精度类型.单精度类型.整型 支持不同数据的转换 2.1.1 变量与 ...

  5. VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化

    问题场景: const addOptions = { singleOrComplex, totalNum: this.smallTotalPrice, selectList: this.purchas ...

  6. WebSocket-java实现

    一.所需jar 二.创建websocket.jsp(注意此页面链接,需要链接到自己的服务) <%@ page language="java" import="jav ...

  7. 2019-8-13未命名文件 sdfsdfsdfsdfsdfsdf

    2019-8-13未命名文件 sdfsdfsdfsdfsdfsdf 新建模板小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 小书匠主按钮>模板 里的模板管理来改变新建文章 ...

  8. Nova Conductor 与 Versioned Object Model 机制

    目录 文章目录 目录 Nova Conductor 数据库访问代理机制 Versioned Object Model 机制 Nova Conductor Conductor 服务作为 Nova 核心部 ...

  9. Selenium 2自动化测试实战28(断言方法)

    一.断言方法 执行用例的过程中,最终用例是否执行通过,是通过判断测试得到的实例结果与预期结果是否相等决定的.unittest框架的TestCase类提供下面这些方法用于测试结果的判断. -assert ...

  10. vue中html、js、vue文件之间的简单引用与关系

    有关vue文件记录:index.html在html中运用组件 <body> <app></app> <!-- 此处app的组件为入口js main.js中定义 ...