Nginx 隐藏服务器名称和版本号

注:默认读者自己会安装nginx,不会的就搜一下怎么安装吧。说明一点。在make的时候可以使用make -j num这里面的num是你的cpu核心数。这样会快一点~~~意为以num个进程同时编译

首先先说为什么要隐藏吧。这张图应该能说明问题了吧。对,就是为了解决安全隐患才这样做。就算升级到最新版本,该不公开还是要不公开的好吧~~ Nginx的版本号主要在两个地方会有: 第一个是HTTP header,有个Server:nginx/1.x.x类似会暴露Web服务器所用软件名称以及版本号,这个也是大多数Web服务器最容易暴露版本号的地方,如下:

怎么验证呢?输入curl -I 你的域名就可以了
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Sun, 30 Sep 2018 05:11:14 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 30 Sep 2018 03:44:42 GMT
Connection: keep-alive
ETag: "5bb046aa-264"
Accept-Ranges: bytes

接着再说说这个版本号吧。 如果安装好的童鞋可以直接在nginx.conf中配置一下就可以隐藏了。配置什么呢? 在你使用的nginx配置文件中的http节点下添加server_tokens off;就可以隐藏了。 第二个地方是Nginx出错页面,比如404页面没有找到等,这是如果用户没有指定页面的话,那么Nginx自己的页面会有版本戳记。

1、打开Nginx主配置文件:nginx.conf,取消注释或添加配置语句。

http { # …省略一些配置

server_tokens off;   #默认是注释掉的

# …省略一些配置}

2、编辑php-fpm配置文件,如fastcgi.conf或fcgi.conf(这个配置文件名也可以自定义的,根据具体文件名修改):

找到:

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

改为:

fastcgi_param SERVER_SOFTWARE nginx;

重启nginx完成 reload可以不断业务重载配置,也可以考虑直接重启。 这样就完全对外隐藏了nginx版本号了,就是出现404、501等页面也不会显示nginx版本   既然版本号可以隐藏,那可不可以隐藏或修改nginx服务器的名称呢?答案是可以,修改或隐藏服务器名称需要修改源码nginx.h,nginx.h在src/core/目录下 。具体操作如下: 把下面两个宏的值修改为自己设定的值,例如”NGX”。 都改为 “” 即隐藏名称。

vim src/core/nginx.h

#define NGINX_VER "nginx/" NGINX_VERSION 改为 #define NGINX_VER "hart-edu" NGINX_VERSION
#define NGINX_VAR "NGINX" 改为 #define NGINX_VAR "hart-edu"

同理改版本号修改#define NGINX_VERSION 后面的值

#define NGINX_VERSION      "1.14.0"
注意事项

1. 在配置文件nginx.conf中不要使用server_tokens off命令, 因为如果设置了该命令,服务器名称就固定了。 如果配置了server_tokens off,在解析文件时 clcf->server_tokens值为0。见ngx_http_core_module.c 的server_token命令处理函数ngx_conf_set_flag_slot

if (ngx_strcasecmp(value[1].data, (u_char *) "on") == 0) {
    *fp = 1;
} else if (ngx_strcasecmp(value[1].data, (u_char *) "off") == 0) {
    *fp = 0;
}

修改u_char ngx_http_server_string[]

vim src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

if (clcf->server_tokens) {
	p = (u_char *) ngx_http_server_full_string;
	len = sizeof(ngx_http_server_full_string) - 1;
} else {
	p = (u_char *) ngx_http_server_string;
	len = sizeof(ngx_http_server_string) - 1;
}

vim src/http/ngx_http_special_response.c

 static u_char ngx_http_error_tail[] =
 "<hr><center>nginx</center>" CRLF
 "</body>" CRLF
 "</html>" CRLF
 ;

每次修改都要记得保存哟。 之后重新编译安装nginx就可以了。 来测试一下看看。

[root@host ~]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: hart-edu/0.0.1
Date: Sun, 30 Sep 2018 05:44:00 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 30 Sep 2018 03:44:42 GMT
Connection: keep-alive
ETag: "5bb046aa-264"
Accept-Ranges: bytes

看已经将nginx信息隐藏了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code