add_before_body和add_after_body指令需满足模块启用、响应类型匹配、gzip关闭、路径可读等前提;须确认Nginx编译含--with-http_addition_module,配置addition_types、关闭gzip,并正确设置root/alias路径及文件权限,推荐用internal限制资源访问并开启log_subrequest排障。

直接用 add_before_body 和 add_after_body 指令就能在响应体前后插入静态 HTML 内容,但必须满足几个关键前提:模块已启用、响应类型匹配、gzip 关闭、路径可读。
确认模块已编译并启用
该模块不是默认开启的,需检查 Nginx 是否带 --with-http_addition_module 编译参数:
- 运行
nginx -V 2>&1 | grep addition,看到输出即表示支持 - 若无结果,需重新编译 Nginx 并加上该选项,或改用
sub_filter+ 占位符替代
配置 location 块启用注入逻辑
模块只对 200 状态且 Content-Type: text/html(或显式声明的类型)生效:
- 在
location块中添加addition_types text/html; text/html; charset=utf-8;,兼容带编码声明的响应 - 务必关闭 gzip:
gzip off;;若必须压缩,应先注入再压缩,但更稳妥的做法是禁用 gzip 或改用gzip_static配合sub_filter - 写入指令:
add_before_body /includes/header.html;和add_after_body /includes/footer.html;
确保文件路径与权限正确
路径解析依赖当前 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才能命中,且不能加开头斜杠 - 文件需为纯静态 HTML,Nginx 不解析 SSI、PHP 等;Nginx worker 进程必须有读取权限
增强安全性与可观测性
推荐将页头页脚资源设为内部访问,防止被直接请求:
- 定义专用 location:
location = /includes/header.html { internal; default_type text/html; } - 开启子请求日志便于排障:
log_subrequest on;,配合自定义log_format记录SUBREQ行为 - 避免在
http或server级别全局启用,按需在具体location中配置,减少误触发


















