Nginx 删除 HttpOnly、Secure(nginx map 的一个应用场景)

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

实际需求的情况是:公司做一个中心化平台,需要对接很多第三方中间件系统,其中有一个点是需要控制各个子平台的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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catoop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值