隐藏NGINX banner 和版本号

本文介绍如何修改Nginx源代码中的版本号,并重新编译安装,最终使Nginx显示自定义版本号。

修改源代码/src/core/nginx.h

/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */




#ifndef _NGINX_H_INCLUDED_
#define _NGINX_H_INCLUDED_




#define nginx_version      33333005010
#define NGINX_VERSION      "888888888"
#define NGINX_VER          "haha/" NGINX_VERSION


#define NGINX_VAR          "AHAH"
#define NGX_OLDPID_EXT     ".oldbin"




#endif /* _NGINX_H_INCLUDED_ */



然后再正常编译安装

最终结果

[root@mini25 sbin]# ./nginx -v
nginx version: haha/888888888


<think>根据用户的问题提供的引用资料,用户需要处理Nginx版本信息泄露的方法。 引用资料中提到了两种方法: 1. 通过配置nginx.conf文件,使用`server_tokens off;`指令来隐藏版本号(引用[1]引用[2])。 2. 修改Nginx源码,重新编译,以自定义服务器名称版本信息(引用[3])。 我将分别详细说明这两种方法,并指出哪种方法更常用、更简单。 方法一:通过配置隐藏版本信息(推荐) 这种方法非常简单,只需要在nginx.conf文件中添加一行配置即可。 具体步骤: 1. 打开Nginx配置文件(通常位于/etc/nginx/nginx.conf)。 2. 在http块中(或者server块中)添加配置:`server_tokens off;` 3. 保存配置文件,然后重启Nginx服务:`sudo systemctl restart nginx` 或者 `sudo service nginx restart` 验证方法: 使用curl命令查看响应头:`curl -I http://your-server-ip/` 查看Server头信息,应该不再显示Nginx版本号,而是显示为`Server: nginx` 方法二:修改源码重新编译(适用于需要更彻底隐藏或自定义服务器名称的场景) 这种方法需要重新编译Nginx,步骤相对复杂,适合对安全性要求极高或需要自定义服务器名称的场景。 具体步骤(根据引用[3]): 1. 下载Nginx源码包,并解压。 2. 备份当前Nginx配置文件SSL证书(重要!)。 3. 修改以下三个文件: - src/core/nginx.h 修改: #define NGINX_VERSION "自定义版本号" // 可以留空 #define NGINX_VER "自定义名称" NGINX_VERSION // 例如 "优快云" - src/http/ngx_http_header_filter_module.c 修改: static u_char ngx_http_server_string[] = "Server: 自定义名称" CRLF; // 例如 "Server: 优快云" CRLF - src/http/ngx_http_special_response.c 修改错误页面底部显示的信息,将原来的Nginx版本信息替换掉。 例如:修改为 static u_char ngx_http_error_tail[] = "<hr><center>优快云</center>" CRLF "</body>" CRLF "</html>" CRLF; 4. 编译并安装Nginx(使用原有的配置参数,并添加需要的模块,可以通过`nginx -V`查看原来的配置参数)。 5. 替换原来的nginx二进制文件(注意备份),并重启Nginx服务。 注意:重新编译后,即使配置了`server_tokens off;`,也不会显示版本号,但会显示自定义的服务器名称。 总结: 对于大多数用户,推荐使用方法一,简单快捷,无需重新编译。 如果用户需要完全隐藏服务器信息(包括将Server头中的nginx字样也隐藏),则使用方法二,但要注意重新编译的复杂性维护成本。 另外,引用[1]中还提到可以进一步通过headers模块重新编译来隐藏server头信息,以及提供了Tomcat其他信息泄露的解决方案链接(但用户只关注nginx,所以不展开)。 最后,提醒用户在修改配置文件后要重启Nginx,并验证是否生效。 根据用户要求,生成相关问题。 </think>### 处理Nginx版本信息泄露的方法 版本信息泄露会暴露服务器使用的Nginx版本,攻击者可据此发动针对性攻击。以下是两种解决方案,按实施难度排序: --- #### **方法1:修改配置文件(推荐,简单高效)** 在Nginx配置文件中添加`server_tokens off;`指令: 1. 打开Nginx配置文件(通常在`/etc/nginx/nginx.conf`) 2. 在`http`或`server`块内添加: ```nginx server_tokens off; # 隐藏版本号 ``` 3. 保存后重启Nginx服务: ```bash sudo systemctl restart nginx ``` **效果**: 响应头中的`Server`字段将从`nginx/1.18.0`变为`nginx`,隐藏具体版本号[^1][^2]。 > **注意**: > - 此方法需确保Nginx版本 ≥1.9.5(早期版本可能不支持) > - 可单独创建配置文件(如`/etc/nginx/conf.d/security.conf`)集中管理安全设置[^1]。 --- #### **方法2:修改源码并重新编译(彻底隐藏)** 适用于需完全伪装服务器名称的场景: 1. 下载Nginx源码包并解压 2. 修改以下三个文件: - **`src/core/nginx.h`** ```c #define NGINX_VERSION "" // 清空版本号 #define NGINX_VER "Your_Custom_Name" // 自定义服务器名称 ``` - **`src/http/ngx_http_header_filter_module.c`** ```c static u_char ngx_http_server_string[] = "Server: Your_Custom_Name" CRLF; // 修改响应头 ``` - **`src/http/ngx_http_special_response.c`** 替换错误页脚中的`nginx`字样为自定义文本[^3]。 3. 重新编译并安装: ```bash ./configure --with-原有参数 # 通过`nginx -V`获取原有编译参数 make && make install ``` **效果**: 响应头错误页面均不出现`nginx`字样,完全自定义显示内容[^3]。 > **风险提示**: > 重新编译需严格保持原有配置参数,否则可能导致服务异常。生产环境建议优先使用方法1。 --- ### 验证方法 执行命令检查响应头: ```bash curl -I http://your-server-ip/ ``` 成功时输出示例: ``` Server: nginx # 方法1效果 Server: Your_Custom_Name # 方法2效果 ``` --- ### 扩展建议 - **进一步加固**: 通过`ngx_headers_module`模块彻底移除`Server`头字段(需重新编译)[^1]。 - **关联修复**: 若同时使用Tomcat,需解决其Banner泄露问题[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值