Nginx Web服务优化,持续更新。。。。。

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 .

猜你喜欢

转载自blog.csdn.net/qq_33235529/article/details/93487407