NGINX高性能Web服务器详解(读书笔记)

时间:2023-06-14 09:15:14

原文地址:NGINX高性能Web服务器详解(读书笔记) 作者:夏寥寥

第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以下版本有效。