基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

如何配置 Nginx 隐藏软件版本号以增强服务器安全性?

隐藏 Nginx 的版本号是服务器安全加固(Hardening)的基本步骤之一。虽然这属于“通过隐蔽实现安全(Security through obscurity)”,不能替代真正的安全防护,但它可以有效防止自动化扫描工具根据特定版本的漏洞进行针对性攻击。

以下是配置 Nginx 隐藏版本号的详细步骤:

第一步:修改 Nginx 配置文件

Nginx 控制版本号显示的指令是 server_tokens。默认情况下,它的值是 on

  1. 使用你习惯的文本编辑器(如 nanovim)打开 Nginx 的主配置文件。通常路径为 /etc/nginx/nginx.conf

    bash
    sudo nano /etc/nginx/nginx.conf
  2. 找到 http { ... } 块。

  3. http 块内部,添加或修改 server_tokens 指令,将其设置为 off

    plaintext
    http {
        # 其他配置...
        
        # 隐藏 Nginx 版本号
        server_tokens off;
        
        # 其他配置...
    }

    注意:你也可以将 server_tokens off; 放在特定的 serverlocation 块中,但通常建议放在 http 块中以全局生效。

第二步:测试并重载 Nginx

在修改配置文件后,务必先测试配置文件的语法是否正确,然后再平滑重载 Nginx,以免导致服务中断。

  1. 测试配置文件:

    bash
    sudo nginx -t

    如果输出显示 syntax is oktest is successful,则可以继续。

  2. 重载 Nginx 以应用更改:

    bash
    sudo systemctl reload nginx
    # 或者使用
    sudo nginx -s reload

第三步:验证配置是否生效

你可以使用 curl 命令查看 HTTP 响应头,检查版本号是否已经隐藏。

在另一台机器或终端中运行:

bash
curl -I http://你的域名或IP地址
  • 修改前的输出示例(会暴露版本号):

    plaintext
    HTTP/1.1 200 OK
    Server: nginx/1.18.0 (Ubuntu)  <-- 这里暴露了具体版本和操作系统
    Date: Mon, 24 Oct 2023 10:00:00 GMT
    ...
  • 修改后的输出示例(仅显示 Nginx):

    plaintext
    HTTP/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),需要额外操作:

  1. 如果你使用的是 Nginx Plus(商业版):
    你可以直接将指令设置为空字符串:server_tokens "";

  2. 如果你使用的是开源版 Nginx:
    你需要编译安装第三方模块 headers-more-nginx-module
    安装该模块后,可以在配置文件中使用以下指令彻底清除 Server 头:

    plaintext
    more_clear_headers 'Server';
  3. 隐藏后端语言版本(如 PHP):
    如果你同时运行了 PHP,PHP 默认也会在响应头输出 X-Powered-By: PHP/7.4.3
    你需要打开 php.ini 文件,找到 expose_php 并设置为 Off

    plaintext
    expose_php = Off

    然后重启 PHP-FPM 服务:sudo systemctl restart php-fpm (或对应的 PHP 版本名称)。

00:00
00:00