如何修改Nginx版本名称伪装任意web server

Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,以其轻量级、高并发能力著称,在网络安全方面,隐藏或伪装Nginx的版本信息可以有效降低被特定漏洞攻击的风险,本文将详细介绍如何通过修改Nginx源代码来伪装其默认名称。
修改步骤
| 步骤 | 文件路径 | |
| 第一步 | src/core/nginx.h |
修改Nginx内部的名称和版本号。 |
| 第二步 | src/http/ngx_http_header_filter_module.c |
修改HTTP ResponseHeader中显示的名称。 |
| 第三步 | src/http/ngx_http_special_response.c |
修改错误页底部Footer中显示的名称。 |
具体操作如下:
1、修改Nginx内部名称和版本号:打开nginx.h文件,找到以下两行:
```c
#define NGINX_VERSION "1.8.0"
#define NGINX_VER "NGINX/" NGINX_VERSION
```
将其修改为你想要伪装的名称和版本号,
```c
#define NGINX_VERSION "1.8.0"
#define NGINX_VER "jdws/" NGINX_VERSION
```
2、修改HTTP ResponseHeader:打开ngx_http_header_filter_module.c文件,找到以下代码:
```c
static char ngx_http_server_string[] = "Server: nginx" CRLF;
```
将其改为:
```c
static char ngx_http_server_string[] = "Server: jdws" CRLF;

```
3、修改错误页底部Footer:打开ngx_http_special_response.c文件,找到以下代码:
```c
static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF;
```
将其改为:
```c
static u_char ngx_http_error_tail[] =
"<hr><center>jdws</center>" CRLF
"</body>" CRLF
"</html>" CRLF;
```
编译与安装
完成上述修改后,需要重新编译和安装Nginx,以下是简要步骤:
1、进入源码包目录:
```bash
cd /path/to/nginx-source-code

```
2、配置编译选项:
```bash
./configure --prefix=/usr/local/nginx --with-http_degrad ...
```
3、编译并安装:
```bash
make && make install
```
4、启动Nginx:
```bash
/usr/local/nginx/sbin/nginx
```
相关问题与解答
1、Q1: 为什么建议不修改fastcgi.conf文件?
A1: 因为外部已经无法了解服务器的名称,达到了隐藏的目的,某些程序可能会对前端(反向代理服务器)进行判断,Nginx不同于Apache,无法动态规则,特别是Wordpress的缓存插件,如果判断是Nginx,会提醒添加一些规则语句。
2、Q2: 除了修改源代码,还有哪些方法可以隐藏Nginx的版本信息?
A2: 可以在Nginx配置文件中加入server_tokens off;指令来隐藏版本号,不过需要注意的是,关闭server_tokens之后,nginx.conf中的其他配置可能无效,需要重新检查和调整。