原文地址:NGINX高性能Web服务器详解(读书笔记) 做者:夏寥寥html
第4章 Nginx服务器的高级配置
4.1 针对IPv4的内核7个参数的配置优化
说明:咱们能够将这些内核参数的值追加到Linux系统的/etc/sysctl.conf文件中,而后使用以下命令使修改生效:
/sbin/sysctl -p
(1)net.core.netdev_max_backlog参数
表示当每一个网络接口接收数据包的速度比内核处理这些包的速率快时,容许发送到队列的数据包的最大数目。默认值为128.
Nginx服务器中定义的NGX_LISTEN_BACKLOG的默认值为511.
(2)net.core.somaxconn参数
该参数用于调节系统同时发起的TCP链接数,默认值为128.在客户端存在高并发请求的状况下,该默认值较小,可能致使连接超时或者重传问题,咱们能够根据实际须要结合并发请求数来调节此值。
(3)net.ipv4.tcp_max_orphans参数
该参数用于设定系统中最多容许存在多少TCP套接字不被关联到任何一个用户文件句柄上。若是超过这个数字,没有与用户文件句柄关联的TCP套接字将当即被复位,同时给出警告信息。这个限制只是为了防止简单的Dos攻击。
(4)net.ipv4.tcp_max_syn_backlog参数
该参数用于记录还没有收到客户端确认信息的链接请求的最大值。对于128MB内存的系统来讲,默认值是1204。小内存系统是128.
(5)net.ipv4.tcp_timestamps参数
该参数用于设定时间戳,可避免序列号的卷绕。当此值赋值为0时,禁用对于TCP时间戳的支持。对于Nginx服务器来讲,建议关闭。
(6)net.ipv4.tcp_synack_retires参数
该参数用于设置内核放弃TCP链接以前向客户端发送SYN+ACK包的数量,通常赋值为1.
(7)net.ipv4.tcp_syn_retires参数
与上个参数相似,该参数设置内核放弃创建链接以前发送SYN包的数量,通常赋值为1.
4.2针对CPU的Nginx配置优化的2个指令
(1)work_process指令
用来设置nginx服务器的进程数。通常设置和CPU的核心数相同,或者倍数。
(2)work_cou_affinity指令
该指令用来为每一个进程分配COU的工做内核。
4.3与网络链接相关配置的4个指令
(1)keepalive_timeout指令
用来设置Nginx服务器与客户端保持链接的超时时间。有2个设置选项,中间用空格隔开。
第一个选项指定客户端与链接保持活动的超时时间,在这个时间以后,服务器会关闭此链接;
第二个选项可选:指定了使用Keep_Alive消息头保持活动的有效时间,若是不设置它,Nginx服务器不会向客户端发送Keep_Alive消息头以保持与客户端某些浏览器的链接,超过设置的时间后,客户端就能够关闭链接,不须要服务器关闭了。
(2)send_timeout指令
用于设置Nginx服务器响应客户端的超时时间,这个超时时间仅针对两个客户端和服务器之间创建链接后,某个活动之间的时间,若是这个时间后客户端没有任何活动,Nginx服务器将会关闭链接。
(3)client_header_buffer_size指令
用于设置Nginx服务器容许的客户端请求头部的缓冲区大小,默认为1kb.此指令可根据系统分页大小来设置。获取分页大小的命令:getconf PAGESIZE
Nginx出现400错误,很大一部分状况是客户端的请求头部过大形成的。设置请求头部大小:
client_header_buffer_size 4k;
(4)multi_accept指令
用于配置Nginx服务器是否尽量多的接收客户端的网络链接请求。默认值为off.
4.4与事件驱动模型相关的配置的8个指令
(1)use指令
用于指定Nginx服务器使用的事件驱动模型;
(2)worker_connections指令
用于设置Nginx服务器的每一个工做进程容许同时链接客户端的最大数量。
Client=worker_processes * worker_connections/2.
(3)worker_rlimit_sigpending指令
用于设置Linux 2.6.6版本以后Linux平台的事件信号队列长度上限。它主要影响事件驱动模型中rtsig模型能够保存的最大信号数。
(4)devpoll_changes和devpoll_events指令
用于设置在/dev/poll事件驱动模型下Nginx服务器能够与内核之间传递事件的数量。前者设置传递给内核的事件数量,
后者设置从内核获取的事件数量。默认值为32
(5)kqueue_changes和kquue_events指令
用于设置在kqueue事件驱动模型下Nginx服务器能够与内核之间传递事件的数量。前者设置传递给内核的事件数量,
后者设置从内核获取的事件数量。默认值为512.
(6)epoll_events指令
用于设置在epoll事件驱动模型下Nginx服务器能够与内核之间传递事件的数量。默认值为512.
注意:与其余事件驱动模型不一样,epoll模型下Nginx服务器向内核传递事件的数量和从内核获取的事件数量是相等的。因此,
不存在epoll_changes指令。
(7)rtsig_signo指令
用于设置rtsig模式使用的2个信号中的第一个,第二个信号是在第一个信号的编号上加1.默认的第一个信号设置为:
SIGRTMIN+10
(8)rtsig_overflow_*指令
该指令有3个具体的指令,rtsig_over_events、rtsig_over_test、rtsig_over_threshold指令。这些指令用来控制当rtsig模式中信号队列溢出时Nginx服务器的处理方式。
rtsig_over_events:指定队列溢出时使用poll库处理的事件数,默认值为16.
tsig_over_test:指定poll库处理完第几件过后将清空rtsig模型使用的信号队列,默认值为32.
tsig_over_threshold:指定rtsig模式使用的信号队列中的事件超过多少时就须要清空队列了。该指令只对Linux 2.4.x如下版本有效。
nginx