nginx基本安全优化
隐藏版本号
- 修改nginx.conf的http标签
http {
.......
server_tokens off ;
.......
}
- 重启nginx
nginx -s reload
- 检查
[root@nginx1 conf]# curl -I localhost HTTP/1.1 200 OK Server: nginx #版本号已消失 Date: Mon, 24 Jun 2019 06:09:30 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 06 May 2019 07:58:22 GMT Connection: keep-alive ETag: "5ccfe91e-264" Accept-Ranges: bytes
修改软件名
这里需要修改nginx的3个源码文件
- 修改nginx-1.6.3/src/core/nginx.h
#define NGINX_VER "nginx/" NGINX_VERSION 将这里的nginx修改为想要的软件名字 #define NGINX_VAR "NGINX" #将这里的NGINX修改为想要 的软件名字 #define NGX_OLDPID_EXT ".oldbin"
- 修改结果如下
#define NGINX_VER "test/" NGINX_VERSION 已修改为自己想要的结果 #define NGINX_VAR "test" 已修改为自己想要的结果 #define NGX_OLDPID_EXT ".oldbin"
- 修改nginx-1.6.3/src/http/ngx_http_header_filter_module.c 的49行
static char ngx_http_server_string[] = "Server: nginx" CRLF;#将nginx修改为想要的名字
- 修改后的结果
static char ngx_http_server_string[] = "Server: test" CRLF;#已修改为自己想要的结果
- 修改nginx-1.6.3/src/http/ngx_http_special_response.c
static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF
- 修改后的结果
static u_char ngx_http_error_tail[] =
"<hr><center>test</center>" CRLF
"</body>" CRLF
"</html>" CRLF
- 重新编译nginx
./configure --prefix=/application/nginx --user=nginx --group=nginx
make&&make install
更改nginx默认用户
在编译的时候可以利用–user和–group来指定用户
./configure --user=nginx --group=nginx --prefix=/application/nginx
- 已经编译后修改默认用户
useradd nginx_test -s /sbin/nologin -M
- 编辑nginx.conf
- 重启nginx服务
发现默认用户已经改变
优化nginx服务性能
优化nginx服务的worker进程数
在高并发、高访问量的web服务场景中,需要启动好更多的nginx进程,以保证快速响应处理大量并发用户的请求。
好比饭店开业需要招聘服务员,如果招聘的人数很少,但是客流量很大,就会出现接待顾客不及时的情况,导致顾客吃饭体验差。如果招聘人数过多,客流量缺很少,就会出现服务员很闲,没事干的情况,这样也会导致饭店的成本升高。因此在开业前期需要对客流量进行预估,然后根据估值调整到最佳的人数。
nginx的worker进程也是如此,在上线前期做出合理的预测可以使用户有一个好的体验。
- 优化nginx进程设置
worker_processes 1 #<< 指定了nginx要开启的进程数,结尾的数字就是要开启进程的个数
nginx的worker_processes优化与cpu的核数相关
- 查看cpu的核数
grep -c /proc/cpuinfo | wc -l
表示为1颗cpu一核
- 查看cpu总颗数
grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
对physical id去重,表示一颗cpu
将worker_processes数修改为与cpu的核数一致
- 重启查看
worker_processes为定义worker进程的数量,建议设置为cpu的核数或核数*2的进程数,具体情况要根据实际的业务来选择,因为这个参数,除了要和cpu核数匹配外,和硬盘存储的数据以及系统的负载也会有关,设置为cpu的个数或是核数是一个好的起始配置
优化绑定不同的nginx进程到不同的cpu上
默认情况下nginx的多个进程有可能跑在某一个或某一刻cpu上,导致nginx进程使用硬件的资源不均,优化的目的是尽可能地分配不同的nginx进程给不同的cpu处理,达到充分利用硬件的多cpu多核资源的目的。
这里以四核cpu为例,参数配置如下:
- 四核cpu开启四个进程
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000; #<< worker_cpu_affinity就是配置nginx进程cpu亲和力的参数,即把不同的进程分给cpu不同的内核处理。这里的0001 0010 0100 1000是掩码,分别代表1、2、3、4核,由于worker_processes进程数为4,因此,上述配置会把每个进程分配给cpu的某一核处理,默认情况下不会绑定任何cpu。
- 四核cpu开启两个进程
worker_processes 4;
worker_cpu_affinity 0101 1010;
- 八核cpu开启8个进程
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。配置完毕后,重启nginx .