要让 ngx_http_addition_module 在静态 HTML 响应前后注入公共代码,需确保模块已启用、响应 MIME 类型匹配(默认 text/html)、子请求内容稳定且格式正确;配置 add_before_body 和 add_after_body 指令指向精确匹配的子请求 URI,并通过 return 或 alias 提供合法 HTML 片段;必要时用 addition_types 扩展支持类型。

要让 ngx_http_addition_module 在所有静态 HTML 响应前后自动注入公共代码,关键在于三点:模块必须已启用、响应 MIME 类型需匹配(默认只对 text/html 生效)、子请求内容需可稳定返回且格式正确。
确认模块已编译启用
该模块不是 Nginx 默认内置模块,必须在编译时显式加入:
- 进入 Nginx 源码目录,执行:
./configure --with-http_addition_module [其他所需模块] - 完成
make && make install后,运行nginx -V 2>&1 | grep addition,输出中应含--with-http_addition_module - 若使用 OpenResty 或预编译包(如 Alpine 的
openresty/openresty),通常已自带,无需手动编译
配置 add_before_body 和 add_after_body
在 location 块中指定子请求 URI,Nginx 会对其发起内部子请求,并将响应体插入主响应前后:
-
add_before_body /_common/head.html;—— 插入页头(如导航栏、CSS 引用) -
add_after_body /_common/foot.html;—— 插入页脚(如版权信息、JS 脚本) - 这两个指令支持
http、server、location级别,建议放在匹配 HTML 文件的 location 中,例如:location ~ \.html$ { ... }或更宽泛的location / { ... }
定义子请求响应内容
子请求 URI 必须能返回合法 HTML 片段,且 Content-Type 明确为 text/html:
立即学习“前端免费学习笔记(深入)”;
- 用
return指令直接返回(最轻量):location = /_common/head.html { default_type text/html; return 200 '<header><nav>...</nav></header>'; } - 或用
alias指向本地文件(适合内容较长):location = /_common/foot.html { alias /usr/share/nginx/html/common/footer.html; } - 注意:子请求路径必须以
=精确匹配,避免被其他规则拦截;返回内容不需完整 HTML 结构(如省略标签),仅片段即可
扩展支持非 HTML 类型(按需)
默认只处理 text/html,若需对 text/plain 或自定义类型也生效,添加 addition_types:
- 仅扩展几种类型:
addition_types text/html text/plain application/xhtml+xml; - 或通配全部(慎用,可能影响 API 响应):
addition_types *;(要求 Nginx ≥ 0.8.29) - 该指令作用域同上,建议与
add_before_body放在同一配置块内
只要子请求返回正常、MIME 匹配成功、主响应未被压缩或缓存干扰,注入就会静默完成。不需要改应用代码,也不依赖后端模板系统。



















