Nginx 的 ngx_http_addition_module 可在响应体首尾插入静态文件实现页眉页脚,需编译启用,仅作用于 text/* 类型的 200 响应,且必须配置在 location 块中,文件路径基于 root 或 alias 解析,不支持动态内容。

可以使用 Nginx 的 ngx_http_addition_module 模块,在 HTTP 响应体的开头(add_before_body)和结尾(add_after_body)动态插入内容,实现类似页眉页脚的效果。该模块默认不编译进官方二进制包,需确认已启用。
确认模块是否可用
运行以下命令检查 Nginx 是否包含该模块:
nginx -V 2>&1 | grep -- '--add-module=.*addition'若无输出,说明未启用。需重新编译 Nginx 并添加 --with-http_addition_module 参数;部分发行版(如 Ubuntu 的 nginx-extras)已预编译支持。
基本配置语法与位置要求
add_before_body 和 add_after_body 只能在 location 块中使用,且仅对 200 响应、text/* 类型(如 text/html、text/plain)生效。Nginx 不会自动添加 Content-Length,建议关闭或由上游控制。
- 被添加的内容是静态文件路径(相对于
root或alias),不是内联 HTML - 文件需存在且可读,否则返回 500 错误
- 响应必须有
Content-Type: text/*,否则不触发插入 - 不支持 SSI、变量展开或动态生成 —— 文件内容完全静态
典型配置示例
假设站点根目录为 /var/www/html,页眉页脚文件放在 /var/www/inc/ 下:
root /var/www/html;
add_before_body /inc/header.html;
add_after_body /inc/footer.html;
}
对应文件结构:
/var/www/inc/header.html →My Site
/var/www/inc/footer.html →
注意:/inc/header.html 是 URI 路径,Nginx 会按 root 拼接为 /var/www/html/inc/header.html。如需不同映射,可用 alias 配合调整。
注意事项与常见问题
该模块不修改原始响应头(如 Content-Length),插入后可能导致长度不匹配,浏览器可能截断或渲染异常。建议:
- 禁用
Content-Length:在 location 中加add_header Content-Length "";(不推荐)或更稳妥地使用chunked编码(Nginx 默认对非 200/304 响应或启用了gzip时自动分块) - 避免对 JSON、XML、二进制等非文本响应误用:用
types显式限定 MIME 类型 - 调试时开启
error_log /path/to/log debug;,查看是否因类型不匹配或文件不可读跳过插入 - 页眉页脚文件本身不应依赖动态逻辑 —— 如需变量或服务端包含,请改用 SSI(
ngx_http_ssi_module)或应用层处理











