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. Codeforces Round #446 Div1 E

    题目大意 有n个数,进行k轮操作:随机一个i,让\(a_i\)减1,然后ans加上\(\Pi_{j\neq i}a_i\). 求ans的期望. 分析 发现,造成的伤害就是原来的ai的积减去k轮操作后的 ...

  2. 【C#-多线程】实现每隔一段时间执行代码(多线程) 3种定时器

    总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...

  3. for 循环用了那么多次,但你真的了解它么?

    其实我们写代码的时候一直都在使用for循环,但是偶尔还是会纠结用哪一个循环. 一.基础的for循环 0.使用while也是一种循环方式,此处探究for相关的循环,就不做拓展了. 1.遍历数组的时候,初 ...

  4. call和ret指令

    call和ret都是用来修改ip或cs:ip,可以用来实现子程序的设计:   1.ret和retf ret    ->修改ip的内容,从而实现近转移: retf    ->同时修改cs和i ...

  5. vue的简单使用

    1.使用vue     下载vue.js:     下载地址:https://vuejs.org/js/vue.min.js:打开链接后是一大堆js代码:ctrl+s保存即可:     新建一个htm ...

  6. angular打包(一): electron

    路由问题: 打包成electron前,需要修改 index.html <base href="/"> 成 <base href="./"> ...

  7. 使用matplotlib绘制常用图表(2)-常用图标设置

    一.使用subplots绘制子图 import numpy as np from matplotlib import pyplot as plt %matplotlib inline x = np.a ...

  8. PHP-配置MySQL

    安装mysql 修改PHP配置文件 修改php安装路径下 php.ini extension=php_mysqli.dll 在代码路径下添加php文件,在里面编辑 <?php phpinfo() ...

  9. HAOI2010软件安装

    首先tarjan缩点应该能看出来,然后我用topsort跑了个DAG上的一维dp,结果WA的很惨. 其实用DAG应该也能做,但是DAG强调整体顺序,而对一些局部问题,例如两个儿子怎么分配,是否给当前节 ...

  10. 遍历 ArrayList与Map集合

    import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 遍历 ArrayList * @ ...