ngx_http_addition_module是nginx官方标准模块,用于在200响应且content-type为text/html的响应体前后插入静态html文件,需编译启用、禁用gzip、配合root/alias正确配置路径。

ngx_http_addition_module 是 Nginx 官方提供的标准模块(需编译时启用 --with-http_addition_module),可用于在响应体的开头(add_before_body)或结尾(add_after_body)插入静态内容,常用于添加公共页头、页脚、统计代码或 SEO 元素。
确认模块已启用并配置基础位置块
该模块仅作用于 200 响应且 Content-Type 为 text/html 的请求(默认行为)。需确保目标 location 匹配 HTML 资源,并开启模块指令:
- 检查 Nginx 是否含此模块:
nginx -V 2>&1 | grep -- '--with-http_addition_module' - 在 server 或 location 块中启用:
addition_types text/html;(若后端返回的 HTML 的 Content-Type 含 charset,如text/html; charset=utf-8,也建议显式加上) - 确保响应未被压缩(gzip on 时,addition 模块不生效);如需压缩,应在 addition 处理之后再压缩,即把
gzip on放在 addition 指令之后(但更稳妥方式是关闭 gzip 或用 sub_filter + gzip_static 替代)
注入外部 HTML 文件作为页头页脚
使用 add_before_body 和 add_after_body 指令指定本地文件路径(相对于 Nginx 的 prefix,通常是 /usr/share/nginx/html/ 或自定义 root):
-
add_before_body /includes/header.html;→ 插入到响应体最前面 -
add_after_body /includes/footer.html;→ 插入到响应体最后面 - 对应文件需放在 Nginx 可读目录下,例如:
/usr/share/nginx/html/includes/header.html - 注意:这些文件必须是纯静态 HTML,不支持服务端解析(如 SSI、PHP);若需动态内容,应由上游应用生成,或改用
sub_filter+ 占位符方案
配合 root 和 alias 确保文件可访问
addition 指令中的路径是按 Nginx 的文件查找逻辑解析的,依赖当前上下文的 root 或 alias 设置:
- 若 location 使用
root /var/www/site;,则add_before_body /includes/header.html实际读取/var/www/site/includes/header.html - 若使用
alias /var/www/site/includes/;,则add_before_body header.html才指向正确路径(注意:alias 下不能以/开头) - 建议统一用
root+ 绝对路径前缀,并验证文件权限(Nginx worker 进程需有读取权限)
注意事项与常见问题
该模块轻量但限制明确,实际使用需避开典型陷阱:
- 不支持 HTTPS 回源或代理响应的自动注入(只处理 Nginx 自己发出的 200 HTML 响应)
- 若上游返回
Content-Encoding: gzip,addition 不触发 —— 必须确保响应未压缩,或在 upstream 关闭 gzip - 无法注入
内容(如 meta、link);如需修改 head,应使用sub_filter替换前的内容 - 注入内容会原样追加,不校验 HTML 结构完整性;确保 header.html 以
<header></header>开始、footer.html 以结束等,避免破坏 DOM










