1、为什么我Nginx一定要隐藏Server信息和版本信息?
有一点常识的人都知道,当有人想攻击我们网站的时候,一般都会先做信息收集,而Nginx的Server信息和版本信息就非常的重要了。以Nnginx版本号来讲:当攻击者知道相应服务的版本号后,就可以寻找该服务相应版本的一些漏洞来入侵攻击网站。因此:我们需要隐藏这些版本号来避免一些不必要的问题!
2、来测试一下,如果Nginx不隐藏Server信息和版本信息是一种什么样的情况?
fujieace:~ fujieace$ curl -I http://127.0.0.1/phpinfo.php
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Fri Oct 19 12:01:27 CST 2018
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.1
从上面可以清楚的看到我们用的nginx服务,版本号是1.14.0,我们的服务器nginx和php版本都暴露了。(PHP隐藏版本信息及服务方法:https://www.fujieace.com/php/expose_php.html)
下面我们主要来谈Nginx隐藏的方法。
提醒:其实,用浏览器F12调试其实也能得和上面相同的结果。
一、Nginx隐藏版本信息 方法
只需在 nginx.conf 里面 http 块中添加以下代码:
server_tokens off;
注意:修改成功后,一定要重启nginx。
二、Nginx 隐藏Server信息 方法
这个就需要重新编译ngnix了。
1、进入解压出来的nginx 源码目录:
cd nginx-1.14.0
2、修改http_header模块中的参数:
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;
修改成
static char ngx_http_server_string[] = "Server: X-Web" CRLF;
static char ngx_http_server_full_string[] = "Server:X-Web " CRLF;
3、修改完后再重新编译nginx,再启动nginx,再看header里面Server信息变成了自定义的名字,不再显示nginx相关信息了。如下图: