注:默认读者自己会安装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信息隐藏了。