当前位置: 首页 > news >正文

NGINX ngx_http_addition_module 模块响应体前后注入内容

一、模块概述

  • 模块名称ngx_http_addition_module
  • 引入版本:自 0.7.9 起支持 addition_types,0.8.29 起支持“*”通配;
  • 功能:对符合 MIME 类型的响应,在响应体前后分别插入指定子请求 URI 返回的内容;
  • 默认状态:未内置,需要编译时加上 --with-http_addition_module

二、编译启用

# 假设已下载 nginx 源码:
./configure --with-http_addition_module [其他参数...]
make
sudo make install

完成后可通过 nginx -V 查看是否出现 --with-http_addition_module 标志。

三、核心指令

1. add_before_body

add_before_body uri;
  • 作用:在主响应体内容前,发起子请求 uri,并将子请求返回的响应体插入主响应中;
  • 上下文httpserverlocation
  • 取消继承:传入空字符串 add_before_body ""; 即可清除上级配置的前置注入。

2. add_after_body

add_after_body uri;
  • 作用:在主响应体内容后,发起子请求 uri,并将子请求返回的响应体追加到主响应后;
  • 上下文:同上;
  • 取消继承add_after_body "";

3. addition_types

addition_types mime-type ...;
  • 默认值:仅对 text/html 响应生效;
  • 扩展:可指定多种 MIME 类型,或使用 * 对任意类型生效(0.8.29+);
  • 上下文httpserverlocation

四、基本示例

http {server {listen 80;server_name example.com;# 对所有 text/html 响应,插入公共头与脚location / {add_before_body /common/header.html;add_after_body  /common/footer.html;}# 子请求返回的数据,仅做纯文本注入location = /common/header.html {default_type text/html;return 200 '<header><h1>欢迎访问 Example</h1></header>';}location = /common/footer.html {default_type text/html;return 200 '<footer><p>&copy; 2025 Example.com</p></footer>';}}
}
  • 客户端访问 /index.html 时,NGINX 先读取原始文件内容,再分别向 /common/header.html/common/footer.html 发起子请求,将两者内容前后拼接后返回。

五、进阶场景

1. 多类型注入

location /api/ {addition_types application/json text/plain;add_after_body  /injection/logging;
}

针对 JSON 接口或纯文本接口,也可注入调试信息或埋点脚本。

2. 条件注入

利用 ifmap 等指令,按请求参数或 Header 控制是否注入:

map $arg_debug $do_add {default "";1       "/debug/info.html";
}location / {add_after_body $do_add;addition_types *;
}

当请求携带 ?debug=1 时,才将 /debug/info.html 内容追加至任意 MIME 类型响应后。

3. 与缓存配合

若子请求内容稳定,可借助 proxy_cachefastcgi_cache 缓存子请求,减少注入带来的性能开销。

六、性能与注意事项

  1. 子请求开销
    • 每一次注入都伴随子请求,可能增加延迟;建议将静态注入内容放在内存 lua_shared_dict(OpenResty)或缓存模块中。
  2. MIME 类型过滤
    • 默认仅对 text/html 注入;如果插入到二进制(如图片、下载包)将损坏响应,务必通过 addition_types 精确限定,或使用 * 时结合条件判断。
  3. 继承与层级
    • http/server 级定义全局注入,location 可覆盖:使用空参数清除继承。
  4. 循环注入
    • 注意避免子请求 URI 又被自身注入,导致死循环;可通过精确 location = /uri 或在子请求中设置 add_before_body ""/add_after_body "" 取消注入。

七、总结

ngx_http_addition_module 提供了一种优雅的“响应体加料”手段,适合注入通用页头、页脚、埋点脚本及调试信息等场景。得益于子请求机制,可灵活复用已有模板或动态生成内容。结合 addition_types、条件判断与缓存优化,可在保证性能的前提下,实现高度可控的内容插入。希望本文示例与实践建议,能帮助你快速上手该模块,为你的 NGINX 服务增色添彩。

相关文章:

  • NVIDIA新模型DAM-3B:描述一切,图像视频局部描述新突破
  • vue3+ts+pinia+vite实战后台管理系统一(框架搭建和配置)
  • IBM Engineering Lifecycle Management 创建用户
  • 迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎
  • C语言中的指针详解
  • 单元测试总结
  • Vue3 项目中 Pinia 与 JavaScript 循环依赖问题深度解析
  • 【前缀和 差分数组 数论】P6042 「ACOI2020」学园祭|省选-
  • 经典数仓架构深度解析与演进:从离线处理到新型架构对比
  • 为什么执行了删除语句后mysql内存无变化?
  • 介绍下Nginx的作用与请求转发机制
  • 初识c++
  • 【Java学习笔记】克隆对象
  • 【HCIA】NAT Server
  • mysql约束
  • RocketMQ 存储核心:深入解析 CommitLog 设计原理
  • UARA串口开发基础
  • PCB硬件电路设计_pcb布线设计
  • SpringAI集成本地部署DeepSeek大模型服务(Ollama)
  • Android开发,实现一个简约又好看的登录页
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查
  • 最高法专门规范涉企案件审执工作:从源头防止趋利性执法司法
  • 泽连斯基公布与特朗普会晤细节,强调实现全面、无条件停火
  • 子公司神州信息十年来首次亏损,神州控股遭国有股东广州城投派驻董事问责
  • 中央政治局会议举行,传递三重确定性