nginx 安全优化(二)

4.优化绑定不同的Nginx进程到不同的CPU上

默认情况Nginx的多个进程有可能跑在某一个或某一核的CPU上,导致Nginx进程使用硬件的资源不均,因此尽可能地分配不同的Nginx进程给不同的CPU处理,达到充分有效利用硬件的多CPU多核资源的目的

在优化不同的Nginx进程对应不同的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核cpu核心,由于worker_processes进程数为4,因此,上述配置会把每个进程分配一核CPU处理,默认情况下进程不会绑定任何CPU,参数位置为main段  

八核CPU服务器的参数配置参考如下:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

worker_cpu_affinity参数的官方说明如下:
worker_cpu_affinity cpumask … ;#<==此行为cpu亲和力参数语法,cpumask为cpu掩码
default: - #<==默认不设置
context:main #<==此行为为worker_cpu_affinity参数可以放置的位置

worker_cpu_affinity的作用是绑定不同的worker进程数到一组CPU上。通过设置bitmask控制进程允许使用的CPUS,默认worker进程不会绑定到任何CPUS

5.Nginx事件处理模型优化
Nginx的连接处理机制在不同的操作系统会采用不同的I/O模型,在Linux下,Nginx使用epoll的I/O多路复用模型
要根据系统选择不同的事件处理模型,可供使用的选择有" use [ kqueue | rtsig | epoll | /dev/poll | select | poll] "
具体的配置参数如下:

 events
     #<== events指令是设定Nginx的工作模式及连接数上限
     {
          use  epoll;
          #<==use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select, poll, kqueue,epoll,rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在linux平台上,而kqueue是用在BSD系统中。对Linux系统linux2.6+的内核,推荐选择epoll工作模式,这是高性能高并发的设置。
     }
 根据Nginx的官方文档建议,也可以不指定事件处理模型,Nginx会自动选择最佳的事件处理模型服务
 events区块及use事件处理参数的官方说明如下:
 syntax:  events {...}  #<==语法配置
 default:--                  #<==缺省没有设置
 context:  main          #<==events标签的放置位置,放在main段
 events  区块是一个用来设置连接进程的区块,例如:  设置Nginx的网络I/O模型,以及连接数等

  use事件的处理参数说明如下:
  syntax: use  method;  #<== 网络模型配置,method选择模型之一
  default: --                    #<==缺省没有设置
  context:   event           #<==网络模型配置放置于events区块内
  对于使用连接进程的方法,通常不需要进行任何设置,Nginx会自动选择最有效的方法。

6.调整Nginx单个进程允许的客户端最大连接数
接下来,调整Nginx单个进程允许客户端的最大连接数,这个控制数的参数为worker_connections
worker_connections的值要根据具体服务器性能和程序的内存使用量来指定(一个进程启动使用的内存根据程序确定),如下:

     event  #<==events指令是设定Nginx的工作模式及连接数上限
     {
             worker_connections   20480;
             #<== worker_connections 也是个事件模块指令;用于定义Nginx每个进程最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections. 进程的最大连接数受Linux系统进程的最大文件数限制,在执行操作系统命令"ulimit  -HSn  65535"或配置相应文件后worker_connections的设置才能生效
     }

worker_connections的官方说明如下:
参数语法: worker_connections number;
默认配置: worker_connections 512;
放置位置: events
说明: worker_connections用来设置一个worker process支持的最大并发连接数,这个连接数包括了所有连接,例如:代理服务器的连接,客户端的连接等,实际的并发连接数除了受worker_connections参数控制外,还和最大打开文件数worker_rlimit_nofile有关

     nginx总并发连接 = worker数量 * worker_connections

7.配置Nginx worker进程的最大打开文件数
调整配置Nginx worker进程的最大打开文件数,这个控制连接数的参数为worker_rlimit_nofile。
该参数的实际配置如下:

  worker_rlimit_nofile   65535;
   #<== 最大打开文件数,可设置为系统优化后的ulimit  -HSn的结果,调整系统文件描述符和这个处理的问题有相同之处

worker_rlimit_nofile_number 的官方说明如下:
参数语法: worker_rlimit_nofile_number
默认配置: 无
放置位置: 主标签段
说明: 此参数的作用是改变worker processes能打开的最大文件数

在这里插入图片描述

8.开启高效文件传输模式

设置参数:  sendfile  on;
  sendfile  参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率

sendfile参数的官方说明如下:
syntax: sendfile on | off; #<== 参数语法
default: sendfile off; #<== 参数默认大小
context: http, server, location, if in location #<== 可以放置的标签段
参数作用:激活或者禁用sendfile()功能。sendfile()是作用于两个文件描述符之间的数据拷贝函数,这个拷贝操作是在内核之中的,被称为"零拷贝",sendfile()比read和write函数要高效很多,因为,read和write函数要把数据拷贝到应用层再进行操作

设置参数: tcp_nopush on;

tcp_nopush 参数的官方说明如下: syntax: tcp_nopush on | off; #<==参数语法
default: tcp_nopush off; #<==参数默认大小 context: http, server,
location #<==可以放置的标签段 参数作用: 激活或者禁用Linux上的TCP_CORK socket
选项,此选项仅仅当开启sendfile时才生效,激活这个tcp_nopush参数可以允许把http response
header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量

设置参数:tcp_nodelay on

用于激活tcp_nodelay功能,提高I/O性能
参数作用:默认情况下数据发送时,内核并不会马上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O,但是,在每次只发送很少字节的业务场景,使用tcp_nodelay功能,等待时间会比较长。
参数生效条件:激活或禁用TCP_NODELAY选项,当一个连接进入到keep-alive状态时生效。

9.优化nginx连接参数调整连接超时时间
当服务器建立的连接没有接收处理请求时,可在指定的时间内就让它超时自动退出。还有当Nginx和fastcgi服务建立连接请求PHP时,如果因为一些原因(负载高,停止响应)fastcgi服务无法给Nginx返回数据,此时可以通过配置Nginx服务参数使其不会死等,因为前面用户还等着它返回数据呢,例如:可设置为如果请求Fastcgi, 10秒内不能返回数据,那么Nginx就中断本次请求,向用户汇报取不到数据的错误。
服务器建立连接也是要消耗资源的,因此,超时设置的太短而并发很大,就会导致服务器瞬间无法响应用户的请求,导致体验下降
企业生产有些PHP程序站点会希望设置短连接,因为PHP程序建立连接消耗的资源和时间相对要少些。而对于Java程序站点一般建议设置长连接,因为Java程序建立连接消耗的资源和时间更多,这是语言运行机制决定的
1)设置参数:keepalive_timeout 60;
用于设置客户端连接保持会话的超时时间为60秒。超过这个时间,服务器会关闭连接,此数值为参考值。
参数作用:keep-alive可以使客户端已经建立的连接一直工作不退出,当服务器有持续请求时,keep-alive会使用正在建立的连接提供服务,从而避免服务器重新建立新连接处理请求。
在这里插入图片描述
此参数用于设置一个keep-alive客户端连接在服务器端保持多久后退出,这个参数的单位是秒,和http响应header域的"Keep-Alive:timeout=time"参数有关,这些header信息会被客户端浏览器识别并处理,不过有些客户端并不能按照服务器端的设置处理,例如:MSIE大约60秒回关闭keep-alive连接
2) 设置参数:client_header_timeout 15;
用于设置读取客户端请求头数据的超时时间。此处的数值15单位是秒,为经验参考值。
参数作用:设置读取客户端请求头数据的超时时间。如果超过这个时间,客户端还没有发送完整的header数据,服务端将返回"Request time out(408)" 错误,可指定一个超时时间防止客户端利用http协议进行攻击。
3)设置参数:client_body_timeout 15;
用于设置读取客户端请求主体的超时时间,默认值是60
参数作用: 设置读取客户端请求主体超时时间。这个超时仅仅为两次成功的读取操作之间的一个超时,非请求整体整个主体数据的超时时间,如果这个超时时间内,客户端没有发送任何数据,Nginx返回"Request time out(408)"错误,默认值是60
4)设置参数: send_timeout 25;
用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接,默认为60s,可以改为参考值25s
参数作用:设置服务器传送http响应信息到客户端的超时时间,这个超时仅仅为两次成功握手后的一个超时,非请求整个响应数据的超时时间,如在这个超时时间内,客户端没有接收任何数据,连接将被关闭

10.上传文件大小(http Request body size)的限制(动态应用)
下面介绍如何调整上传文件(http Request body size)限制。
首先,在Nginx的主配置文件里加入如下参数:

 client_max_body_size   8m;
 具体大小根据公司的业务做调整,如果不清楚就先设置为8m吧

参数作用:
设置最大的允许的客户端请求主体大小,在请求头域有"Content-Length",如果超过了此配置值,客户端会收到413错误,意思是请求的头目过大,有可能浏览器不能正常的显示这个错误,设置为0表示禁止客户端请求主体大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值