第四章 Nginx服务器的高级配置
概述:工作过程关键参数配置来提供Nginx服务器性能
本章涉及内容:
- 针对IPv4的内核参数优化
- 针对处理器的指令配置
- 针对网络连接的指令配置
- 与事件驱动相关的指令配置
4.1、针对Ipv4的内核7个参数的配置优化
将涉及Ipv4参数追加到Linux系统的/etc/sysctl.conf文件中,然后需要使用如下命令使之生效
# /sbin/sysctl -p
1、net.core.netdev_max_backlog参数,默认值128
这是表示当每个网路接口接收数据包的速率比内核处理这些包的速率快,允许发送到队列的数据包的最大数目(简单理解就是,进货速度快,销售出去速度慢,这是设置仓库为最大)
net.core.netdev_max_backlog=262144
2、net.core.somaxconn参数
用于调节系统同时发起的TCP连接数,默认值128
net.core.somaxconn = 262144
用法如上
3、net.ipv4.tcp_max_orphans 参数
该参数用于设置系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。(类似共用同一资源)
内存比较充足的情况下,可以增大这个参数的值
net.ipv4.tcp_max_orphans = 262144
4、net.ipv4.tcp_max_syn_backlog参数
该参数用于记录尚未收到客户端确认信息的连接请求的最低值。
net.ipv4.tcp_max_syn_backlog=262144
5、net.ipv4.tcp_timestamps参数
该参数用于设置时间戳,可以避免序列化的卷绕,当此值赋值为0时,禁用对于TCP时间戳的支持
net.ipv4.tcp_timestamps = 0
6、net.ipv4.tcp_synack_retries参数
该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量。一般赋值为1,即内核放弃连接之前发送的一次SYN+ACK包
net.ipv4.tcp_synack_retries = 1
7、net.ipv4.tcp_syn_retries参数
设置内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_syn_retries = 1
4.2、针对CPU的Nginx配置优化的2个指令
主要对多核CPU进行配置优化, 两个指令:worker_processes 和 worker_cpu_affinity
1、worker_processes指令
默认值为1,太高主进程调度负担加大。针对双核CPU,建议设置为2或4
worker_processes 4;
2、worker_cpu_affinity指令
摘自《Nginx高性能Web服务器详解》
几核就是几位二进制, 每一个工作进程均匀配置不同cpu上 如果是八核(00000002 这也八位)
worker_cpu_affinity 0001 0100 1000 0010;
4.3、与网络连接配置的4个指令
1.keepalive_timeout 指令
保持连接问题,第一个数字表示,服务器多久主动断开连接, 第二个参数表示客户端(浏览器)主动断开连接(它会发送Keep-Alive消息头)
keepalive_timeout 60 50; 单位s
服务器60s之后主动断开连接,客户端(浏览器)50s之后主动断开连接
2.send_timeout 指令
该指令用于设置Nginx服务器响应客户端超时的时间
send_timeout 10s; 该设置表示Nginx服务器与客户端建立连接后,某次会话中服务器等待客户端响应响应10s,就会自动关闭连接
3.client_header_buffer_size指令
该指令用于设置nginx服务器允许的客户端请求头部的缓冲区大小,默认值1kb ,返回400错误可能是这个原因
# getconf PAGESIZE 获取这个值
显示4KB
client_header_buffer_size 4k;
4、multi_accept指令
该指令用于配置nginx服务器是否尽可能多地接收客户端的网络连接请求,默认值为off
4.4、与事件驱动模型相关的配置的8个指令
1.use 指令
用于指定Nginx服务器使用的事件驱动模型
2.worker_connections指令
该指令用于设置Nginx服务器的每个工作进程允许同时连接客户端的最大数量
worker_connections number
计算同时连接的客户端最大数量 client = worker_processes*worker_connections/2
worker_connections 65535;
但是这个最大值受到linux系统本身可以打开的文件句柄数量限制,所有需要设置open file resource limit
# cat /proc/sys/fs/file-max
# echo "2390251" /proc/sys/fs/file-max; sysctl -p
3、worker_rlimit_sigpending指令
linux平台的事件信号队列长度上线
worker_rlimit_sigpending limit (超过这个值,会自动交给poll模型处理未处理客户端请求)
worker_rlimit_sigpending 1024;
4、devpoll_changes 和 devpoll_events指令
这个两个指令用于设置/dev/poll事件驱动模式下nginx服务器可以与内核之间传递事件的数量,前者设置传递给内核的事件数量,后者设置从内核获取的事件数量
devpoll_changes number
devpoll_events number
number默认值为32
5、kqueue_changes 和 kqueue_events指令
它含义如上,它number默认值为512
6、epoll_events指令
epoll _changes number 设置epoll事件驱动模式下nginx服务器可以与内核之间传递事件的数量
number默认值为512
7、rtsig_signo指令
该指令用于设置rtsig模式下使用的两个信号中的第一个,第二个信号是在第一个信号的编号上加1.
rtsig_signo signo
默认的第一个信号设置为SIGRTMIN+10
查看linux系统支持SIGRTMIN
8、rtsig_overflow_* 指令
该指令代表三个具体的指令,rtsig_overflow_events 、rtsig_overflow_test 和 rtsig_overflow_threshold
rtsig_overflow_events 指定队列溢出使用poll库处理的事件数,默认值16
rtsig_overflow_test 指定poll处理完第几件事件后将清空rtsig模型使用的信号队列,默认值为32
rtsig_overflow_threshold 指定rtsig模式使用的信号队列中的事件超过多少时,需要清空队列。 默认值10