Nginx 隐藏运行特征需三步:一设 server_tokens off 关闭版本号输出;二用 proxy_hide_header 屏蔽后端泄露头;三自定义错误页并验证响应头与源码无敏感信息。

在 Nginx 中通过 nginx.conf 隐藏运行特征与签名,核心是切断版本号、服务标识、构建信息等主动暴露的线索。这不是美化配置,而是减少攻击面的基础安全动作。
关闭版本号输出(必做)
在 http { } 块顶层添加一行:
-
server_tokens off;—— 必须写在http块内,不能放在server或location中 - 它会同时移除响应头中的
Server: nginx/1.26.3和默认错误页 HTML 源码里的nginx/1.26.3字样 - 检查配置文件路径:通用系统为
/etc/nginx/nginx.conf,宝塔用户为/www/server/nginx/conf/nginx.conf - 删掉其他位置(如站点 conf 文件)重复出现的
server_tokens行,避免覆盖
过滤后端返回的敏感头(反向代理必需)
若 Nginx 作为反向代理,上游服务(如 Apache、PHP-FPM、Tomcat)可能自带 Server 或其他泄露头,server_tokens off 对其无效:
- 在对应
location或server块中加:proxy_hide_header server; - 顺手屏蔽常见泄露头:
proxy_hide_header x-powered-by;、proxy_hide_header x-aspnet-version;、proxy_hide_header x-runtime; - 后端是 PHP 的话,还需在
php.ini中设expose_php = Off
替换默认错误页(堵住内容层泄露)
默认 404/502 页面不仅含版本号,还可能带操作系统名、编译参数或路径信息:
- 创建一个干净的静态页,例如
/usr/share/nginx/html/error.html,内容仅含简单提示,不带任何服务器标识 - 在
http或server块中添加:error_page 404 /error.html;、error_page 502 503 504 /error.html; - 访问一个不存在路径(如
/nonexistent),查看 HTML 源码,确认无nginx/、Ubuntu、built by等字样
验证是否真正生效(两处缺一不可)
重载配置后必须双验证:
- 查响应头:
curl -I https://your-domain.com | grep Server—— 应只显示Server: nginx或该字段完全不出现 - 看错误页源码:用浏览器打开
https://your-domain.com/xxx(故意触发 404),右键“查看页面源代码”,确认没有版本、系统、构建时间等字符串 - 执行
nginx -t确认语法正确,再用nginx -s reload(非 restart)平滑加载


















