Nginx 删除 HttpOnly、Secure(nginx map 的一个应用场景)_catoop的博客-程序员秘密_nginx 取消httponly

技术标签: 应用部署  

如题,百度能解决问题的帖子暂时没发现。后转战谷歌,看到一个解决别的问题的帖子,从中受到了启发,醍醐灌顶后问题终得以解决。

实际需求的情况是:公司做一个中心化平台,需要对接很多第三方中间件系统,其中有一个点是需要控制各个子平台的Cookie信息(内部运维使用,不对互联网开放,所以想去除HttpOnly限制)。

  • 各个平台埋入一个 html 文件,通过里面的 js 脚本读取和修改对应第三方系统的 cookie 信息。
  • 一些第三方系统对 Cookie 设置了 HttpOnly,通过 js 是无法读取和修改的。
  • 所有的接入系统,都通过平台的一个 nginx 进行了管理。

于是乎,萌生了一个方案:
既然所有平台都由统一的 nginx 管理,那么直接在 nginx 里,把 HttpOnly 给干掉不就行了?

针对此方案,变通的方法是使用 nginx 的 map 映射变量法来重新设置 Cookie 的值(说出来挺抽象的,下面直接看代码便一清二楚了)

# 删除Cookie中的HttpOnly
map $sent_http_set_cookie $resp_cookie {
    ~*(?<CK>.+)HttpOnly $CK;
}
    
server {
    listen 80;
    server_name  *.test.com;
    
    location / {
    
        add_header Set-Cookie $resp_cookie;
        
        proxy_pass  http://xxxxx;
   }
}
  • 按照Cookie规范,HttpOnly是最后一个字符串,所以通过在 map 中使用正则表达式提取除 HttpOnly 之前的值,然后使用 add_header 复写到 Cookie 中。
  • $sent_http_set_cookie 为 nginx 内置变量,还有很多其他 $send_http 开头的变量表示响应内容中的相关信息。
  • 处理 Cookie 的 Secure 也是一样(本文略)

通过本文内容可以发现,其实这个方法并不是 nginx 专门为 HttpOnly 设置的方案,我认为这个方法可以解决很多类似的问题。除本文之外的其他需求有时候也可以通过这样的正则提取替换法来实现。


(END)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/catoop/article/details/113737763

智能推荐

Java基础__Java中异常处理那些事_weixin_30414635的博客-程序员秘密

一、Exception 类的层次所有的异常类是从 java.lang.Exception 类继承的子类。Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。Error 用来指示运行时环境发生的错误。异常类有两个主要的子类:IOException 类和 RuntimeException 类。...

百度地图离线开发demo(初始化地图)_oliver666666的博客-程序员秘密_百度地图初始化

使用百度地图api,只要瓦片对应上,api对上了,地图的使用还是较为简单的,demo官网上的也可参考,只需将BMapGL后边的gl去掉即可&lt;!--地图初始化 --&gt;&lt;template&gt; &lt;div id="allmap" style="width: 100%;height: 100%;" /&gt;&lt;/template&gt;&lt;script&gt;export default { components: {}..

opencv和HALCON坐标系的不同_冯相文要加油呀的博客-程序员秘密

opencv的坐标原点在左上角,往右为X轴正方向,往下为Y轴正方向(用Image Watch可以很容易看出来)HALCON的坐标原点在左上角,往右为Y轴正方向,往下为X轴正方向(HALCON窗口左下角可以出来)

Python自学之路:第二课_MIYAGI_Desu的博客-程序员秘密

第2课0. 什么是BIF?BIF 就是 Built-in Functions,内置函数。为了方便程序员快速编写脚本程序(脚本就是要编程速度快快快!!!),Python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如 print() 的功能是“打印到屏幕”,input() 的作用是接收用户输入(注:Python3 用 input() 取代了 Python2 的 raw_input(),用法如有不懂请看视频讲解)。太多BIF学不过来怎么办?看不懂英文说明怎么办?Python3的资料太少怎么办?没事

MemCache详解_Quiet_boy的博客-程序员秘密

MemCache是什么MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

随便推点

C++ 哈希表_ZS_Wang_Blogs的博客-程序员秘密_c++ 哈希表

什么是哈希表map、hash_map、unordered_map的引入unordered_map的用法1. 什么是哈希表1.1 哈希表的定义“散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。从上面的百度百科,我们小白可以知道3点:哈希表也叫散列表哈希表是一个数据结构散列表是数组.

计算机网考 总结范文,年终工作总结范文_2017考研:计算机网络复习核心_沪江英语..._Wingdows的博客-程序员秘密

计算机专业是考研报考的热门专业之一,但是计算机考研要复习很多的专业课,复习起来也很费时间。今天就和大家分享计算机网络这门课的复习重点。1、计算机网络体系结构这部分内容要了解计算机网络概念的概念、组成;计算机网络的分类,发展过程等。理解网络分层结构、网络协议、接口、服务等概念。重点掌握OSI参考模型和TCP/IP模型的区别和联系。2、物理层对这部分内容的考查,以基本原理和概念的形式为主。掌握信道、信...

python cnn 回归模型_CNN学习笔记:线性回归_三川啦啦啦的博客-程序员秘密

CNN学习笔记:Logistic回归线性回归二分类问题Logistic回归是一个用于二分分类的算法,比如我们有一张图片,判断其是否为一张猫图,为猫输出1,否则输出0。基本术语进行机器学习,首先要有数据,比如我们收集了一批关于西瓜的数据,例如(色泽=青绿;根蒂=收缩;敲声=浊响)(色泽=乌黑;根蒂=稍蜷;敲声=沉闷)(色泽=浅白;根蒂=硬挺;敲声=清脆)每对括号内是一条记录,这组记录的集合称为一个数...

网页JS方法中动态加载文件_weixin_34387284的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

PCL学习笔记(一)_weixin_33857230的博客-程序员秘密

由于项目需要,开始学习一下HP公司的PCL打印语言,发现这方面的中文资料非常少,我做下记录也为后人提供便利。关于PCL的介绍可以参考wiki百科http://zh.wikipedia.org/zh-cn/PCL相关文档也可以在此链接下载。我参考的是PCL 5E technical reference manual 主要做一下翻译工作。。。一、概述PCL ,是Printer Comm...

Tomcat内存优化第二篇 - 个别优化参数详解_路克森的博客-程序员秘密_tomcat内存优化参数

博主个人主页前言今天我们接着来说tomcat这部分的小知识哦 上一篇我们提到了如何设置我们tomcat的内存大小 这一篇主要来说一下tomcat的优化思路 以及如何能够让tomcat抗住并发呢?开发众所周知 我们一个完整的系统肯定不是一个单体应用就能扛得住的 在大并发的压迫下 如果我们的程序还是个单机系统 那肯定会会快就挂了 所以我们就不得不做出改变 那么常见的tomcat优化或者说高可用...

推荐文章

热门文章

相关标签