阿狸先森|Nginx专题(3):nginx优化方法论( 二 )


Syntax:worker_connectionsnumber;Default:1024Context:events5.配置Nginxworker进程最大打开文件数
Syntax:worker_rlimit_nofilenumber;Default:-Context:events上面两个参数都受最大文件句柄数限制 , 当运行的服务需要大并发进程运行时 , 如果不够 , 就会报出“toomanyopenfiles”file-max是内核可分配的最大文件数可通过cat/proc/sys/fs/file-max查看nr_open是单个进程可分配的最大文件数可通过cat/proc/sys/fs/nr_open查看但是也不是不可修改可通过编辑/proc/sys/fs/file-max修改echo30296>/proc/sys/fs/file-max单个进程分配文件数如上操作6.修改用户的最大文件句柄数限制
临时修改ulimit-HSnlimit永久修改vi/etc/security/limits.conf-H选项和-S选项分别表示对给定资源的硬限制(hardlimit)和软限制(softlimit)进行设置 。 硬限制(hardlimit)一旦被设置以后就不能被非root用户修改 , 软限制(softlimit)可以增长达到硬限制(hardlimit) 。 如果既没有指定-H选项也没有指定-S选项 , 那么硬限制(hardlimit)和软限制(softlimit)都会被设置 。总结
a.所有进程打开的文件描述符数不能超过/proc/sys/fs/file-maxb.单个进程打开的文件描述符数不能超过userlimit中nofile的softlimitc.nofile的softlimit不能超过其hardlimitd.nofile的hardlimit不能超过/proc/sys/fs/nr_open2、Nginx相关优化配置-网络相关什么是SYN攻击?
攻击者短时间伪造不同IP地址的SYN报文 , 快速占满backlog队列 , 使服务器不能为正常用户服务 , SYN攻击是所有黑客攻击事件中最常见又最容易被利用的一种攻击手法 , 由来已久 , 破坏威力巨大 。 SYN攻击属于DOS攻击的一种 , 它利用TCP协议缺陷 , 通过发送大量的半连接请求 , 耗费CPU和内存资源
TCP连接握手示意图
?net.ipv4.tcp_syn_retries=6-主动建立连接时 , 发SYN的重试次数?net.ipv4.ip_local_port_range=3276860999-建立连接时本地口可用范围SYN_RCVD状态
?net.ipv4.tcp_max_syn_backlog-SYN_RCVD状态连接的最大数?net.ipv4.tcp_synack_retries-被动建立连接时 , 发SYN/ACK的重试次数服务端处理三次握手
SYN攻击的原理就是向服务器发送SYN数据包 , 并伪造源IP地址 。 服务器在收到SYN数据包时 , 会将连接加入backlog队列 , 并向源IP发送SYN-ACK数据包 , 并等待ACK数据包 , 以完成三次握手建立连接 。 由于源IP地址是伪造的不存在主机IP , 所以服务器无法收到ACK数据包 , 并会不断重发 , 同时backlog队列被不断被攻击的SYN连接占满 , 导致无法处理正常的连接小号cpu资源 。
1、减少SYN-ACK数据包的重发次数(默认是5次)sysctl-wnet.ipv4.tcp_synack_retries=3sysctl-wnet.ipv4.tcp_syn_retries=32、增大backlog队列(默认是1024)?net.core.netdev_max_backlog-接收自网卡、但未被内核协议栈处理的报文队列长度?net.ipv4.tcp_max_syn_backlog-SYN_RCVD状态连接的最大个数sysctl-wnet.ipv4.tcp_max_syn_backlog=20483、超出处理能力时 , 对新来的SYN丢弃连接?net.ipv4.tcp_abort_on_overflow4、生成验证cookie , 重连?net.ipv4.tcp_syncookies=1-当SYN队列满后,新的SYN不进A队列,计算出cookie再以SYN+ACK中的序列号返回客户端 , 正常客户端发报文时,服务端根据报文中携带的cookie重新恢复连接注意:synccookies是妥协版的TCP协议 , 失去了很多功能 , 所以先应优化服务端应用程序的负载能力 , 加大应用程序backlog值TcpFastOpen