[Nginx] – 性能优化 – 配置文件优化
Nginx基本安全优化
1.调整参数隐藏Nginx版本号信息
一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例如:Web软件名称及版本号等信息),这样恶意的用户就很难猜到他攻击的服务器所用的是否是特定漏洞的软件,或者是否有对应的漏洞存在。
修改Nginx版本信息
[root@web02 ~]# vim /application/nginx/conf/nginx.conf
http{
server_tokens off;
}
#我们在http标签端开启即可
没修改之前
[root@web02 ~]# curl -I blog.etiantian.org
HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Mon, 30 May 2016 11:17:14 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.5.32
Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
修改后结果(需要重启生效)
[root@web02 ~]# curl -I blog.etiantian.org
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 30 May 2016 11:21:33 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.5.32
Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
修改为后浏览器访问404界面也不会出现版本信息
server_tokens参数的官方说明如下:
syntax: server_tokens on|off; #此行为参数语法,on为开启,off为关闭
default: server_tokens on; #此行意思是不配置该参数,软件默认情况的结果
context: http,server,location #此行为server_tokens参数可以放置的位置
参数作用:激活或禁止Nginx的版本信息显示在报错信息里以及server的响应首部位置
Enables or disables emitting of nginx version in error messages and in the “Server” response header field; #此行是参数的作用原文
2.更改源码隐藏Nginx软件名及版本号
隐藏了Nginx版本号后,更进一步,可以通过一些手段把web服务软件的名称也给因此,或者更改为其他Web服务软件名迷惑黑客。Nginx模块不支持更改软件名,所以我们需要更改Nginx源代码才能解决。
1.第一步是一次修改3个Nginx源码文件
修改的第一个文件为nginx-1.6.3/src/core/nginx.h
[root@web02 ~]# cd /home/oldboy/tools/nginx-1.6.3/src/core/
[root@web02 core]# vim nginx.h
#define NGINX_VERSION "9.9.9"
#修改为想要的版本号;前面得“#”号不可去掉,直接修改即可,否则,编译得时候会提示nginx.h文件有错误。
#define NGINX_VER "ABCDOCKER/" NGINX_VERSION
#将nginx修改想要修改的软件名称
#define NGINX_VAR "ABCDOCKER"
#将nginx修改为想要修改的软件名称。
#define NGX_OLDPID_EXT ".oldbin"
2.第二步修改nginx-1.6.3/src/http/ngx_http_header_filter_module.c的第49行
[root@web02 nginx-1.6.3]# vim src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: ABCDOCKER" CRLF;
#修改本行,此处的文件是我们Curl 出来显示的名称
3.第三步修改nginx-1.6.3/src/http/ngx_http_special_response.c,对外页面报错时,它会控制是否展示敏感信息。修改28~30行
[root@web02 nginx-1.6.3]# vim src/http/ngx_http_special_response.c
21 static u_char ngx_http_error_full_tail[] =
22 "<hr><center>"ABC(www.abcdocker.com)"</center>" CRLF
23 "</body>" CRLF
24 "</html>" CRLF
25 ;
26
27
28 static u_char ngx_http_error_tail[] =
29 "<hr><center>ABC(www.abcdocker.com)</center>" CRLF
30 "</body>" CRLF
31 "</html>" CRLF
修改完成之后需要重新编译nginx
查看原来编译的参数
[root@web02 nginx-1.6.3]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.6.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
[root@web02 nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
提示:需要停止原来的nginx