要让Nginx支持安全头部控制,必须通过--add-module静态集成headers-more-nginx-module;需下载兼容版本、确保config文件存在、用绝对路径引用,并在configure中复用原参数且显式启用--with-http_ssl_module等安全相关模块。

要让 Nginx 在源码编译阶段支持安全相关的头部控制(比如隐藏 Server 信息、清除敏感响应头、设置 CSP 或 HSTS),核心是集成 headers-more-nginx-module,它提供比原生 add_header 和 hide_headers 更灵活、更细粒度的头部操作能力。该模块不内置,必须通过 --add-module 显式引入。
确认并准备 headers-more 模块源码
该模块需单独下载,且版本需与当前 Nginx 版本兼容(建议使用官方 GitHub 最新稳定版):
- 从 openresty/headers-more-nginx-module 克隆或下载 release 包(如 v0.34)
- 解压后确保目录内包含
config文件——这是 configure 能识别它的必要条件 - 路径建议用绝对路径(如
/opt/nginx-modules/headers-more),避免相对路径引发定位失败
编译时启用模块并保留基础安全能力
执行 ./configure 时,除挂载模块外,还需确保关键安全相关模块已启用:
- 必须带上
--with-http_ssl_module(HTTPS 是 HSTS、CSP 等安全头生效的前提) - 推荐启用
--with-http_v2_module(HTTP/2 对现代安全策略更友好) - 添加
--add-module=/opt/nginx-modules/headers-more,可多次使用以叠加其他模块(如 echo、set-misc) - 若已有线上环境,务必复用原
nginx -V输出中的 configure 参数,仅追加新模块,防止意外禁用 SSL 或 gzip 等功能
安装后验证模块是否生效
编译安装完成后,不能直接写配置,先确认模块已静态链接进二进制:
- 运行
/usr/local/nginx/sbin/nginx -V 2>&1 | grep headers-more,应输出含--add-module=...的行 - 或执行
nginx -V查看完整参数,确认configure arguments中存在对应路径 - 若无输出,说明 configure 阶段未识别模块——常见原因是 config 文件缺失、路径错误或权限不足
在配置中启用安全头部策略
模块启用后,即可在 http、server 或 location 块中使用其指令强化响应头:
more_set_headers 'X-Content-Type-Options: nosniff';more_set_headers 'X-Frame-Options: DENY';more_set_headers 'Content-Security-Policy: default-src \'self\';';more_clear_headers 'Server' 'X-Powered-By';-
more_set_headers 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload';(仅限 HTTPS server 块)
注意:more_* 指令支持正则匹配、条件判断(配合 if)和多值覆盖,比原生命令更可控。所有修改后务必 nginx -t 校验语法,再 nginx -s reload 生效。


















