NGINX 标头和主体过滤器模块

2023-12-19

我一直在编写一个 NGINX 过滤器模块,它可以读取/写入传入请求的 cookie。如果未正确设置特定 cookie(即身份验证 cookie),它将把传出标头状态设置为适当的错误代码。按照以下说明,这可以正常工作埃文·米勒的教程 http://www.evanmiller.org/nginx-modules-guide.html#filters-header。我试图开始工作的下一部分(到目前为止还没有)是调用正文过滤器,以便在遇到错误响应时我可以插入/替换正文响应文本。我又跟了埃文·米勒的教程 http://www.evanmiller.org/nginx-modules-guide.html#filters-body在身体过滤器上,我一生都无法让它发挥作用。这是我的设置:

static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
...
...


static ngx_http_module_t ngx_http_source_cookie_module_ctx = {
    NULL,                             /* preconfiguration */
    ngx_http_source_cookie_init,             /* postconfiguration */

    NULL,                             /* create main configuration */
    NULL,                             /* init main configuration */

    NULL,                             /* create server configuration */
    NULL,                             /* merge server configuration */

    ngx_http_source_cookie_create_loc_conf,  /* create location configuration */
    ngx_http_source_cookie_merge_loc_conf    /* merge location configuration */
};

ngx_module_t ngx_http_source_cookie_module = {
    NGX_MODULE_V1,
    &ngx_http_source_cookie_module_ctx,      /* module context */
    ngx_http_source_cookie_commands,         /* module directives */
    NGX_HTTP_MODULE,                  /* module type */
    NULL,                             /* init master */
    NULL,                             /* init module */
    NULL,                             /* init process */
    NULL,                             /* init thread */
    NULL,                             /* exit thread */
    NULL,                             /* exit process */
    NULL,                             /* exit master */
    NGX_MODULE_V1_PADDING
};
/*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*/
static ngx_int_t
ngx_http_source_cookie_header_filter(ngx_http_request_t *r)
{
   // this gets invoked
   ...
}

/*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*/
static ngx_int_t
ngx_http_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
{
   // this never get invoked
   ...
}

/*--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*/
static ngx_int_t
ngx_http_source_cookie_init(ngx_conf_t *cf)
{
    // registering of my filters

    ngx_http_next_header_filter = ngx_http_top_header_filter;
    ngx_http_top_header_filter = ngx_http_source_cookie_header_filter;

    ngx_http_next_body_filter = ngx_http_top_body_filter;
    ngx_http_top_body_filter = ngx_http_body_filter;

    return NGX_OK;
}

这是我的基本设置,据我所知,它在我遇到的所有示例/教程中都是正确的。我想知道是否需要启用一些不同的东西...比如 NGINX 配置选项、NGINX ./configure 编译选项等。

任何帮助是极大的赞赏。


我注意到 Evan 没有修复 http 内容长度ngx_http_<module_name>_header_filter().

如果我不添加http内容长度(r->headers_out.content_length_n),请求末尾插入的文本将不会从 nginx-1.2.7 stable 输出。

您还可以看到页脚过滤模块 https://github.com/alibaba/nginx-http-footer-filter.

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

NGINX 标头和主体过滤器模块 的相关文章

  • 如何在 Mac 上安装 Beautiful Soup 模块?

    我读了这篇文章但没有找到解决方案 http docs python org install index html http docs python org install index html 正常 的方法是 访问美丽汤网站 http ww
  • 熊猫:有条件的groupby

    我有数据框 ID used at active seconds subdomain visiting category 123 2016 02 05 19 39 21 2 yandex ru 2 Computers 123 2016 02
  • 将代码从 htaccess 重写为 nginx 配置?

    我在将 htaccess 文件中的重写代码实现到 nginx 配置中时遇到问题 我已经尝试过生成器 http winnginx com htaccess http winginx com htaccess用于生成我的重写 代码 我的ngin
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • Beanstalk 部署忽略 .ebextensions 中的 nginx 配置文件

    我在单实例 Elastic Beanstalk 环境中托管 Java Web 应用程序 并添加了几个 ebextension 文件 这些文件在每次部署时成功为我创建配置文件 然而 我无法找到一种方法让 Beanstalk 在 etc ngi
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • python 中的 win32con 模块是什么?我在哪里可以找到它?

    我正在构建一个在 Windows 中使用 python 和 c 的开源项目 我收到以下错误消息 ImportError No module named win32con 同样的情况也发生在它正在运行的 预构建 代码中 除了我的电脑 P 我认
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75
  • 抑制 nginx 访问被拒绝错误日志

    我在 nginx 中设置了一些规则来拒绝 IP 访问 这很有效 但对于来自被拒绝 IP 的每个请求 都会记录以下开头的错误 error 7325 0 5761 access forbidden by rule client 有没有办法抑制这
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • Magento:如何覆盖本地模块中的模型

    我试图在本地文件夹中覆盖本地文件夹中的模块 但我不知道是否可能 这就是我所做的 我创建了 local Mycompany Modulename Model Model php 我想覆盖 local Othercompany Modulena
  • Nginx docker容器代理传递到另一个端口

    我想在 docker 容器中运行 Nginx 它监听端口 80 并且当 url 以 word 开头时 我希望它 proxy pass 到端口 8080api 我有一些网络应用程序侦听端口 8080 这在没有 docker 的情况下对我来说一
  • 需要从数组中删除字符串[重复]

    这个问题在这里已经有答案了 我在 for 循环中有一个数组 如下所示 var arr abc 5 city 2 area 2 max choice 我只需要这样的数字 var arr 5 2 2 有人可以在这里帮忙吗 另一种方法是使用转换后
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • 如何修复日期过滤器 VBA,因为它没有拾取我范围内的所有日期

    我正在尝试创建一个过滤器来过滤掉我选择的日期内的所有日期 我选择的日期将始终反映整个月 例如 如果我需要 2019 年 5 月的数据 我将输入开始日期为 01 05 2019 结束日期为 31 05 2019 我的数据过滤器将需要选取经过我
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • 如何在 erlang 中安装模块?

    我是 Erlang 新手 想知道如何安装第三方模块以在我的 Web 应用程序中使用 您将这些文件放在哪里以及执行什么类型的命令 如果您希望在系统范围内安装第 3 方库 例如 Mochiweb 最好将其设置在 ERL LIBS 环境变量下 我
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 在需要时初始化模块

    我有一个模块 里面有一些初始化代码 加载模块时应执行 init 目前我正在这样做 in the module exports init function config do it in main var mod require myModu

随机推荐

  • Spring WebFlux 反应式 WebSocket 防止连接关闭

    我正在为我的应用程序开发简单的聊天模块 使用 Spring WebFlux 后端使用 ReactiveMongoRepository 前端使用 Angular 4 我能够通过 WebSocketSession 接收数据 但在从数据库流式传输
  • 电子邮件中的 mathematica 代码并保持与笔记本相同的格式

    众所周知 当要发送包含一些 Mathematica 代码的电子邮件时 做法是执行以下操作 选择单元格 单元格 gt 转换为 gt 输入表格 然后复制为文本 然后将代码粘贴到电子邮件或任何其他交换媒体中 上述唯一的问题是 当另一端从电子邮件复
  • 在inApp浏览器中注入代码并在应用程序中获取其返回值

    我正在编写一个phonegap应用程序 它在inAppBrowser内启动一个网络应用程序 我想从这个网络应用程序获得某些反馈 以便在我的phonegap应用程序中进一步使用它 因此 用户启动 Web 应用程序 在那里执行一些操作 然后单击
  • 状态栏有新通知发送时如何亮屏?

    这是我设置通知的代码 它有效 Override public void onReceive Context context Intent intent category String intent getExtras get CATEGOR
  • 在 Mac OS Big Sur 上使用 pyenv 安装 python 3.6 时出现问题

    在我的 MacBook Air OS Big Sur 上使用命令 pyenv install 3 6 13 安装 Python 3 6 13 时 出现以下错误 Installing Python 3 6 13 python build us
  • 在 Android 设备上尽可能快地删除或删除 sqlite - 表

    我有一个有 1400 行的表 每行都有一个 blob 字段 保存 10kb 到 500kb 之间的数据 我需要删除该表 我花了 3 5 分钟删除该表 并花了 3 分钟删除该表 这对用户来说太长了 我怎样才能尽快删除该表 不需要回滚或任何安全
  • 可以使用 plinq ForAll 批量插入数据库吗?

    我正在这样做 entities AsParallel ForAll o gt repository Insert o 这好吗 我能用它获得更多表现吗 No 这个可能会更快 因为它利用了 SQL 的并行性 但最终 SQL 必须在进行插入时对表
  • Bang IE7 - 这是什么意思?

    这个标题并不像看起来那么疯狂 我保证 在研究另一个问题时 我在 Stack Overflow 的样式表中注意到以下内容 width auto width 650px ie7 padding bottom 20px ie7 这是一种奇怪的条件
  • 部署 .NET COM dll,出现错误 (0x80070002)

    我有一个 NET COM 程序集 正在尝试部署到 Web 服务器 IIS 6 Win 2003 我们已成功将此程序集部署到测试环境 但生产环境无法正常工作 该程序集是从经典 ASP 页面调用的 每次该页面尝试使用 初始化程序集 Set LT
  • 为什么 View.display 返回 null?

    我正在尝试使用本教程来实现 CameraX https codelabs developers google com codelabs camerax getting started 5 https codelabs developers
  • C# 禁用表单加载时的文本框焦点

    我有一个文本框 我想禁用它的焦点 如何通过编程禁用文本框的焦点 使用 C 编程禁用文本框焦点 我使用了下面两个代码不起作用 textBox1 focus false textBox1 focused false 您可以设置this Acti
  • 如何为 Android v2 地图创建发布密钥

    我尝试了下面的调试密钥代码 它工作正常 当我制作 apk 时 地图崩溃了 在谷歌搜索后 我发现调试键在发布模式下工作 keytool list v keystore C Users your user name android debug
  • 用于表单的 Google Apps 脚本,生成唯一 ID 号

    我创建了一个简单的 Google 表单 其中包含以下字段 姓名 电子邮件 工资和请求 当用户完成表单后 我想向他 她发送一封包含信息的电子邮件 但是 我想使用 请求 字段插入一个唯一的号码 用户在需要进一步通信时可以参考该号码 如果用户在
  • 获取自 Pandas DataFrame 中上次出现以来的天数?

    假设我有一个 Pandas DataFramedf Date Value 01 01 17 0 01 02 17 0 01 03 17 1 01 04 17 0 01 05 17 0 01 06 17 0 01 07 17 1 01 08
  • 通过 LINQ 使用通用列表中的值格式化字符串

    问题已更新 我有一个通用列表 其中可以包含以下值 Sector 1 Sector 2 Sector 4 或以下值 All Sectors 我想将这些值格式化为字符串 如下所示 Sector 1 2 4 or All Sectors 目前 我
  • 如何将许多对象(具有相同的类)保存到txt文件并将这些对象与列表框VB.NET绑定

    我尝试编写一个简单的项目来将数据保存到txt文件中 读取它并使用绑定数据来显示它 我的项目是这样的 当我将 ID 人员添加到 添加 ID 文本框 靠近 添加 ID 按钮的文本框 时 它将把 ID 添加到列表框和 ID 名称 文本框中 使用此
  • WCF 是否使用 ThreadPool 为 PerCall 服务创建新实例?

    对于限制设置为高的 PerCall WCF 服务 例如 最大并发调用 200 个 WCF 是否会启动一个新实例并在线程池线程上调用请求 如果是 那么这对允许的并发调用总数有影响吗 我之所以这么问 是因为我似乎从未达到在服务限制配置中设置的最
  • 在 Hmisc::latex 中转义 LaTeX 控制符号

    我在 R 中有一个数据框 不幸的是其中包含包含美元符号的字符串 当函数latex 从包装中Hmisc http cran r project org web packages Hmisc index html将此数据框转换为 LaTeX 表
  • 在 flutter / dart 中创建二维数组

    我对扑扑和飞镖是全新的 我搜索过谷歌 我能找到的只是如何在颤振中制作一维列表 我需要一张价值观图表 具体来说 我需要一行 12 长 一列 31 长 并填充升序数字 1 32 63 2 33 64 3 34 65 etc thanks int
  • NGINX 标头和主体过滤器模块

    我一直在编写一个 NGINX 过滤器模块 它可以读取 写入传入请求的 cookie 如果未正确设置特定 cookie 即身份验证 cookie 它将把传出标头状态设置为适当的错误代码 按照以下说明 这可以正常工作埃文 米勒的教程 http