如何配置 Nginx 隐藏软件版本号以增强服务器安全性?
隐藏 Nginx 的版本号是服务器安全加固(Hardening)的基本步骤之一。虽然这属于“通过隐蔽实现安全(Security through obscurity)”,不能替代真正的安全防护,但它可以有效防止自动化扫描工具根据特定版本的漏洞进行针对性攻击。
以下是配置 Nginx 隐藏版本号的详细步骤:
第一步:修改 Nginx 配置文件
Nginx 控制版本号显示的指令是 server_tokens。默认情况下,它的值是 on。
使用你习惯的文本编辑器(如
nano或vim)打开 Nginx 的主配置文件。通常路径为/etc/nginx/nginx.conf。bashsudo nano /etc/nginx/nginx.conf找到
http { ... }块。在
http块内部,添加或修改server_tokens指令,将其设置为off:plaintexthttp { # 其他配置... # 隐藏 Nginx 版本号 server_tokens off; # 其他配置... }注意:你也可以将
server_tokens off;放在特定的server或location块中,但通常建议放在http块中以全局生效。
第二步:测试并重载 Nginx
在修改配置文件后,务必先测试配置文件的语法是否正确,然后再平滑重载 Nginx,以免导致服务中断。
测试配置文件:
bashsudo nginx -t如果输出显示
syntax is ok和test is successful,则可以继续。重载 Nginx 以应用更改:
bashsudo systemctl reload nginx # 或者使用 sudo nginx -s reload
第三步:验证配置是否生效
你可以使用 curl 命令查看 HTTP 响应头,检查版本号是否已经隐藏。
在另一台机器或终端中运行:
curl -I http://你的域名或IP地址
修改前的输出示例(会暴露版本号):
plaintextHTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) <-- 这里暴露了具体版本和操作系统 Date: Mon, 24 Oct 2023 10:00:00 GMT ...修改后的输出示例(仅显示 Nginx):
plaintextHTTP/1.1 200 OK Server: nginx <-- 现在只显示 nginx Date: Mon, 24 Oct 2023 10:05:00 GMT ...
同时,你可以故意访问一个不存在的页面(例如 http://你的域名/404notfound),查看 Nginx 默认的错误页面底部,版本号也会消失。
进阶安全建议 (可选)
server_tokens off; 只能隐藏版本号,HTTP 响应头依然会显示 Server: nginx。如果你想彻底删除 Server 响应头或将其伪装成其他服务器(如 Apache),需要额外操作:
如果你使用的是 Nginx Plus(商业版):
你可以直接将指令设置为空字符串:server_tokens "";如果你使用的是开源版 Nginx:
你需要编译安装第三方模块headers-more-nginx-module。
安装该模块后,可以在配置文件中使用以下指令彻底清除 Server 头:plaintextmore_clear_headers 'Server';隐藏后端语言版本(如 PHP):
如果你同时运行了 PHP,PHP 默认也会在响应头输出X-Powered-By: PHP/7.4.3。
你需要打开php.ini文件,找到expose_php并设置为Off:plaintextexpose_php = Off然后重启 PHP-FPM 服务:
sudo systemctl restart php-fpm(或对应的 PHP 版本名称)。