使用 NGINX 从缓存的响应中删除标头

2024-02-20

我让 NGINX 作为反向代理在几个 Flask 应用程序前面运行。

我想为注销用户实现缓存。

Flask-login 添加了一个Set-Cookie每个响应的标头,即使对于匿名用户也是如此,因为它包含带有 CSRF 令牌的会话 cookie。这意味着我正在使用proxy_ignore_headers Set-Cookie;确保 NGINX 确实缓存了这些内容(它不会缓存并响应Set-Cookie标题)。

我在应用程序中设置一个单独的 cookie 来指示用户的登录/注销状态,并使用它来确定是否使用缓存。这很好用。

问题是注销用户的缓存响应包括Set-Cookie设置会话 cookie 的标头。此会话 cookie 会提供给任何访问缓存的请求,这最终会导致不同的用户收到相同的 CSRF 令牌。

我想要么阻止Set-Cookie标头存储在缓存中,或者当它从缓存发送到客户端时删除/覆盖它。

我尝试过设置proxy_hide_headers Set-Cookie这会将其从缓存的响应中删除,同时也会从该应用程序的响应中删除。所以没有人可以登录。这很糟糕。

感觉应该有一个非常简单的解决方案,无论我如何努力谷歌,我都能找到它。

任何帮助表示赞赏。


Update:在尝试了一百万次之后,我有了一个适用于多个 cookie 的解决方案,我想听听您的意见。
在 Debian 10 上我安装了apt-get install libnginx-mod-http-lua我认为这不是完整的 OpenResty lua-nginx-module,不是吗?

map $upstream_bytes_received $hide_cookie {
   default '';
   '' Set-Cookie;
}

内部位置:

header_filter_by_lua_block {
   ngx.header[ngx.var.hide_cookie] = nil;
}

它有效,我会做更多测试......


之前的回答,对于 1 个 cookie,没有 Lua:

我一直在为此寻找解决方案,但目前它适用于ONLY ONE cookie.

首先我遇到了以下问题:$proxy_hide_header不接受变量,并且不能在内部使用if().
我终于找到了一个包含可行解决方案的答案:使用标头过滤代理响应标头 https://stackoverflow.com/questions/53754229/using-a-header-to-filter-proxied-response-headers.

这是我现在的代码,我将对其进行更多测试,因为这是一个微妙的问题:

map $upstream_bytes_received $cookies {
default $upstream_http_set_cookie;
'' '';
}

然后是内部位置:

    proxy_hide_header Set-Cookie;
    add_header Set-Cookie $cookies;

也许我会默认:没有cookie,如果失败的话会很明显,并且在隐私方面问题较少。

但我认为这个解决方案无法针对多个 cookie 进行改进,我必须寻找其他地方,如果我可以强制使用变量$proxy_hide_header将是最终的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NGINX 从缓存的响应中删除标头 的相关文章

  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • LibreOffice 并行将 .docx 转换为 .pdf 效果不佳

    我有很多 docx 文件需要转换为 pdf 将它们一一转换需要很长时间 所以我编写了一个 python 脚本来并行转换它们 from subprocess import Popen import time import os os chdi
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 缓存一致性是否始终可以防止读取过时的值?失效队列允许吗?

    在 MESI 协议中 仅当将缓存行保持在独占 修改状态时才写入缓存行 要获取独占状态 您可以向持有同一高速缓存行的所有核心发送无效请求 但是是否存在一种微架构 其中某些内核会在实际使缓存线无效之前做出确认响应 如果确实如此 那不是违反了缓存
  • McNemar 在 Python 中的测试以及分类机器学习模型的比较 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有用 Python 实现的好的 McNemar 测试 我在 Scipy stats 或 Scikit
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • 如何在 Django Rest 框架中编写“删除”操作的测试

    我正在为 Django Rest Framework API 编写测试 我一直在测试 删除 我对 创建 的测试工作正常 这是我的测试代码 import json from django urls import reverse from re
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i

随机推荐