1、基于安全的优化
1)隐藏版本信息
在Nginx配置文件nginx.conf中的http标签内加入“server_tokens off;”。
修改前:
修改:
重启nginx:
[root@linux conf]# /application/nginx/sbin/nginx -s reload
修改后:
2)修改nginx源码,隐藏软件名及版本号,修改文件如下,修改后重新编译安装nginx。
[root@linux conf]# vim /home/linux/tools/nginx-1.19.4/src/core/nginx.h
[root@linux conf]# vim /home/linux/tools/nginx-1.19.4/src/http/ngx_http_header_filter_module.c
[root@linux conf]# vim /home/linux/tools/nginx-1.19.4/src/http/ngx_http_special_response.c
当页面报错时,可控制是否展示敏感信息。
修改后重新编译、安装、配置、启动服务。
3)更改Nginx服务的默认用户
方法一:配置nginx.conf文件
创建nginx用户
[root@linux conf]# useradd nginx -s /sbin/nologin -M
配置nginx.conf文件
#user nobody;
修改为:
user nginx nginx;
修改后重新加载nginx
[root@linux conf]# /application/nginx/sbin/nginx -s reload
方法二:在编译nginx软件的时候,指定用户和组
如四-3中的配置,如下:
./configure --user=nginx --group=nginx --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module
检查更改用户的效果
[root@linux conf]# ps -ef |grep nginx|grep -v grep
2、根据参数优化nginx服务性能
1)优化nginx服务的worker进程数
对于高并发场合,进程数初始设置为cpu核数的2倍较为合适,后期可根据徐彤负载、硬盘存储等情况做调整。
查看cpu颗数:
[root@linux conf]# grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
查看cpu核数:
[root@linux conf]# grep processor /proc/cpuinfo |wc -l
修改nginx.conf文件中的worker_processes,设置nginx服务worker进程数,重启nginx服务。
[root@linux conf]# vim nginx.conf
[root@linux conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx/conf/nginx.conf test is successful
[root@linux conf]# /application/nginx/sbin/nginx -s reload
2)将不用的nginx进程绑定到不用的cpu内核上
Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能。开启示例如下:
#2核cpu,开启2个进程
worker_processes 2;
worker_cpu_affinity 01 10;
#2核cpu,开启4个进程,
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
#4核cpu,开启2个进程,0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核;
worker_processes 2;
worker_cpu_affinity 0101 1010;
3)nginx时间处理模型优化
示例:
events
{
use epool;
}
Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll,其中select和poll是标准工作模式,kqueue和epoll是高效工作模式,不同处是epoll用在linux平台,而kqueue用在BSD系统中。
不指定时间处理模型,nginx会自动选择最佳的事件处理模型服务。
4)nginx单个进程允许的客户端最大连接数
参数:worker_connections
5)nginx worker进程的最大打开文件数
参数:worker_rlimit_nofile
6)连接超时参数设置
参数:keepalive_timeout
7)读取客户端请求头数据的超时时间
参数:client_header_timeout
8)读取客户端请求主体的超时时间
参数:client_body_timeout
9)响应客户端的超时时间
参数:send_timeout
10)上传文件大小限制
参数:client_max_body_size