Nginx转发丢失cookie表现形式及解决方案

目录
  • 一. 丢失Cookies操作
  • 二. 丢失Cookies原因
  • 三. 解决方案
  • 四. 容易搞不清的点

一. 丢失Cookies操作

路径一 :http://localhost:8080/content/requestAction!showMainServiceReqDetail.action
路径二 :http://localhost/content/requestAction!showMainServiceReqDetail.action
路径三 :http://localhost/clp/requestAction!showMainServiceReqDetail.action

路径一是直接访问,路径二与路径三是通过nginx访问

三个访问前提条件
①浏览器有Cookie,如下图所示:
通过访问路径http://localhost:8080/content/requestAction!XXX.action 附加Cookies中的JSESSIONID。
此cookies中有JSESSIONID,存放着本次访问,后端可以认证的唯一JSESSIONID,如果没有它就会导致无法访问。

②配置了nginx配置文件

server {
      listen       80;
      server_name  localhost;
location /clp {
   #proxy_set_header Host $host;
   #proxy_set_header X-Real-IP $remote_addr;
   #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://localhost:8080/content;

}

location /content {
   #proxy_set_header Host $host;
   #proxy_set_header X-Real-IP $remote_addr;
   #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://localhost:8080/content;
}

通过上面三个路径访问,路径一与路径二可以访问成功,路径三访问失败

二. 丢失Cookies原因

因为 http://localhost:8080/content/requestAction!XXX.action的访问路径为/content/requestAction
方式一进行访问没有,没有使用nginx,所以不会丢失cookies,
方式二访问虽然使用了nginx,但是因为未经过nginx转发前路径相同,所以并不会丢失nginx
方式三访问使用了nginx,并且访问路径也不同导致了nginx转发丢失cookies的问题。

三. 解决方案

location /clp {
   #proxy_set_header Host $host;
   #proxy_set_header X-Real-IP $remote_addr;
   #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_cookie_path /content /clp;  #这一句就可以解决nginx转发丢失cookie的问题
   proxy_pass http://localhost:8080/content;
}

四. 容易搞不清的点

上面的访问路径是下图红框中的路径,只有第一个斜杠后面的才是。

到此这篇关于Nginx转发丢失cookie表现形式及解决方案的文章就介绍到这了,更多相关Nginx转发丢失cookie内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • nginx cookie有效期讨论小结

    每一次访问都会在浏览器生成Cookie,那么Cookie的存在对于用户来说是好还是坏呢?说实话,这玩意的存在确实会带来一系列的问题,有趣的是几乎每个站点都难以离开Cookie,由于Cookie的使用因其貌似简单,而很容易被人轻视.最近在开发过程中,审视应用中的Cookie代码,几乎只需要很小的代价就可以获得巨大的安全收益.因此写下这份笔记加深记忆. cookie的安全隐患 在实际的应用场景中,Cookie被用来做得最多的一件事是保持身份认证的服务端状态.这种保持可能是基于会话Session的,也

  • 利用nginx解决cookie跨域访问的方法

    一.写在前面 最近需要把阿里云上的四台服务器的项目迁移到客户提供的新的项目中,原来的四台服务器中用到了一级域名和二级域名.比如aaa.abc.com 和bbb.abc.com 和ccc.abc.com.其中aaa.abc.com登录,通过把cookie中的信息setDomain给.abc.com.其他系统可以共享这个cookie.但是新的四台服务器中并没有申请域名,只有四个ip: 192.168.0.1    单点登录服务器 192.168.0.2 192.168.0.3 192.168.0.4

  • 关于nginx日志增加cookie信息

    一.获取全部cookie信息 这个比较方便,直接在nginx.conf文件中添加$http_cookie log_format main '[$time_local] - $remote_addr:$remote_port - $remote_user - $upstream_addr $upstream_status $upstream_response_time - ' '"$request" $status $bytes_sent $request_time ' '"$

  • nginx sticky实现基于cookie负载均衡示例详解

    目录 前言 思考 1.cookie_jsessionid 负载均衡 1.1 后端准备 1.2 hash $cookie_jsessionid;配置 2.nginx sticky 负载均衡 2.1 下载 sticky 2.2 重新编译升级nginx 2.3 upstream 配置 sticky 2.4 修改后端不再创建session 2.5 再次 多次请求 3.sticky 其他用法 总结 前言 sticky 是一个nginx的第三方模块 它不在nginx发行版中 需要额外编译这个模块的, 它的思

  • Feign调用服务时丢失Cookie和Header信息的解决方案

    目录 Feign调用服务丢失Cookie和Header信息 服务调用方 服务接受方 Feign调用存在的问题 ①feign远程调用丢失请求头 ②异步调用Feign丢失上下文问题 Feign调用服务丢失Cookie和Header信息 今天在使用Feign调用其他微服务的接口时,发现了一个问题:因为我的项目采用了无状态登录,token信息是存放在cookie中的,所以调用接口时,因为cookie中没有token信息,我的请求被拦截器拦截了.  参考几篇文章,靠谱的解决方法是:将cookie信息放到请

  • Nginx上传文件全部缓存解决方案

    下面通过文字说明给大家详解Nginx上传文件全部缓存解决方案. 因为应用服务器(Jetty)里面实现了上传时写了进度条.经过缓存.就没法读取到进度了.此外,在Nginx处缓存文件,也降低了传输效率. nginx采用1.5.6. 后端采用nodejs+formidable的方式接受上传文件,本问题的对应与采用什么样的后端没太大关系,这里只是交代一下. 问题: 在前端页面上将文件上传,nginx没有将每一块收到的文件数据块转发给后端,而是全部缓存了下来,全部收取完成后再一块一块的转发给后端,显而易见

  • Nginx 转发匹配规则的实现

    一.正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 二.文件及目录匹配 -f 和 !-f 用来判断是否存在文件 -d 和 !-d 用来判断是否存在目录 -e 和 !-e 用来判断是否存在文件或目录 -x 和 !-x 用来判断文件是否可执行 三.rewrite指令的最后一项参数为flag标记,flag标记有 last 相当于 apache 里面的[L]标记,表示 rewrite. break 本条规则匹配完成后,终止匹配

  • Nginx session丢失问题处理解决方法

    在用nginx的反向代理tomcat的路径中,可能会出现session丢失问题.每发送一次请求 JESSIONID  都会发生改变,说明上一次形成的session丢失,从而创建新的session. 第一种情况: server{ listen 80; server_name www.jiahemdata.com www.jiahemdata.cn; charset utf-8; location /{ proxy_redirect off; proxy_pass http://127.0.0.1:

  • 解决springcloud Zuul丢失Cookie的问题

    springcloud 配置智能路由zuul 后 转发请求指定的方法后会导致 cookie 无法获取的问题,主要解决方法是 再application 配置文件中加入 sensitive-headers: zuul: routes: yyxt: path: /** serviceId: com.modou.dpt sensitive-headers: custom-sensitive-headers: true 我的是这样的,具体原理是zuul 中 sensitiveHeaders的默认值初始值是

  • Nginx转发socket端口配置详解

    Nginx 转发 socket 端口常见场景:在线学习应用,在常规功能之外,增加一个聊天室功能,后端选择 swoole 提供服务提供者,同时不想前端直接 ip:port 方式链接到服务,需要使用 Nginx 进行转发. 常规情况,我们可以在用户页面,直接建立 socket 链接,但这样的操作会暴露端口,带来一定的安全隐患,使用 Nginx 进行转发,可以隐藏端口.额外的问题就是一些 header 参数也需要在转发过程中带给 socket 服务提供者,其他只需要 Nginx 处理一下从常规协议转换

  • 跨域设置Cookie失效问题解决方案原理分析

    目录 问题出现场景 代码实现如下 登陆接口相关代码 问题出现的解决方案如下 反思和结语 问题出现场景 在做登录功能时,想把用户的信息通过Set-cookie在客户端设置cookie信息. 1.服务端通过cors中间件实现接口跨域访问.koa-session-minimal实现cookie的设置. 代码实现如下 const session = require('koa-session-minimal') const cors = require('@koa/cors'); // app.js co

  • 重启nginx后丢失nginx.pid的解决方法

    一,nginx的停止操作 停止操作是通过向nginx进程发送信号来实现的.步骤1:查询nginx主进程号 复制代码 代码如下: ps -ef | grep nginx 在进程列表里 面找master进程,它的编号就是主进程号了. 步骤2:发送信号 从容停止Nginx:kill -QUIT 主进程号快速停止Nginx:kill -TERM 主进程号强制停止Nginx: 复制代码 代码如下: pkill -9 nginx 另外, 若在nginx.conf配置了pid文件存放路径则该文件存放的就是Ng

  • docker中通过nginx+confd动态生成配置的解决方案

    当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情.我们可以通过nginx+confd+配置中心实现一套方案避免出错并减少繁琐的流程. 首先直接上nginx+confd的dockerfile FROM nginx:1.21.6 # 拷贝confd二进制可执行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0 COPY ./confd-0.16.0-linux-amd64 /usr/loca

随机推荐