server_tokens off仅隐藏nginx版本号,响应头和错误页中server值由“nginx/1.22.1”变为“nginx”,但server字段仍存在;无法自定义字符串或彻底删除该字段,全局配置建议置于http块。

server_tokens off 能隐藏哪些信息
只设 server_tokens off 就能去掉响应头里的版本号(如 Server: nginx/1.22.1 → Server: nginx),同时错误页(404、502 等)里也不再显示版本字符串。但它**不会移除 Server 字段本身**,字段名仍保留,值缩为 nginx。
常见误判:用 curl -I 看到 Server: nginx 就以为“完全隐藏”了——其实攻击者仍知道这是 Nginx,只是少了版本线索。
- 生效范围:http / server / location 块均可配置,优先级 location > server > http
- 不支持正则或自定义字符串,
server_tokens string "web"是无效语法 - 若配置在 location 块里,仅对该路径生效;全局隐藏建议放 http 块
彻底删除 Server 响应头需重编译
想让响应头里连 Server: nginx 都不出现,必须修改源码并重新编译。核心改动点有三处:
-
src/core/nginx.h:注释或清空#define NGINX_VER和#define NGINX_VERSION -
src/http/ngx_http_header_filter_module.c:把ngx_http_server_string[]的值改为"Server: "或直接删掉 CRLF 后的字符串部分 - 若还希望
nginx -V不暴露版本,需同步修改src/core/nginx.c中的ngx_version和ngx_sys_version
注意:重编译后要严格复用原 configure 参数(可用 nginx -V 查看),否则可能丢失 SSL、HTTP/2 等关键模块。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
用 headers-more-nginx-module 替代重编译
如果你用的是预编译包(如 Ubuntu 官方源、Alpine 的 nginx:alpine),又不想碰源码,headers-more-nginx-module 是更轻量的选择。它支持直接删掉或覆写 Server 头:
- 安装后,在配置中加:
more_clear_headers Server;(彻底删除) - 或:
more_set_headers "Server: web-server";(自定义值) - 该模块不改变 Nginx 二进制,但需确认当前 nginx 是否已静态链接此模块;未内置时需重编译 nginx 并显式
--add-module=...
典型报错:unknown directive "more_clear_headers",说明模块没加载成功,不是配置写错。
验证时容易漏掉的两个地方
改完配置别急着庆祝,先检查这两处:
- 触发一个真实 502 错误(比如临时停掉 upstream 服务),看错误页面 HTML 源码里是否还有
nginx/字样——server_tokens off对它也生效,但很多人只测首页 - 用
curl -I https://your-domain.com测 HTTPS 站点时,确认是否走的是正确 server 块(有多个 server_name 时容易配错块);HTTP 和 HTTPS 的配置可能是分离的
最稳妥的验证方式是抓包:用 tcpdump -i any port 80 -w nginx.pcap + Wireshark 打开,过滤 HTTP 响应,避免被代理或 CDN 缓存干扰。










