您的位置:首页 > 运维架构 > Nginx

nginx 服务器的高级配置---第四章

2017-04-28 00:00 316 查看
一、针对IPV4的内核7个参数的配置优化

这里提及的参数是IPV4网络有关的Linux内核参数,我们可以将这些内核参数的值追加到linux系统的/etc/sysctl.conf 文件中,然后使用如下命令修改生效:

#/sbin/sysctl -p

1.net.core.netdev_max_backlog参数

表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。一般默认值为128.

Nginx 服务器中定义的NGX_LISTEN_BACKLOG默认为512。

net.core.netdev_max_backlog = 262144。

2.net.core.somaxconn参数

该参数用于调节系统同时发起的TCP连接数,一般默认值是128.

在客户端存在高并发请求的情况下,该默认值较小,可能导致连接超时或者重传问题。我们可以根据实际需要结合并发请求数来调节此值。

net.core.somaxconn = 262144

3.net.ipv4.tcp_max_orphans参数

该参数用于设定系统同中最多允许存在对少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,没有与用户文件句柄关联的TCP套接字将立即被修复,同时给出警告信息。

这个参数只是为了防止简单的Dos( Denial of Service ) 攻击.

一般在系统内存比较充足的情况下,可以增大这个参数的赋值:

net.ipv4.tcp_max_orphans = 262144

4.net.ipv4.tcp_max_syn_backlog参数

该参数用于记录尚未收到客户端确认信息的连接请求的最大值。

对于拥有128M内存的系统而言,此参数的默认值是1024,对于小内存的系统则是128,一般在内存比较充足的情况下,可以增加这个参数的赋值:

net.ipv4.tcp_max_syn_backlog= 262144

5.net.ipv4.tcp_timestamps参数

该参数用于设置时间戳,这个可以避免序列号的卷绕。在一个1Gb/s的链路上,遇到以前用过的序列号的概率很大。

当此时赋值为0时,禁用对于TCP事件戳的支持。

在默认情况下,TCP协议会让内核接收这种“异常”的数据包。针对Nginx服务器来说:建议将其关闭:net.ipv4.tcp_timestamps = 0

6.net.ipv4.tcp_synact_retries参数

改参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量。

为了建立对端的连接服务,服务器和客户端需要进行三次握手,第二次握手期间,内核需要发送 SYN 并附带一个回应前

一个SYN的ACK,这个参数主要影响这个过程,一般赋值为1,即内核放弃连接之前发送一次 SYN + ACK 包,可以设置

为 net.ipv4.tcp_synact_retries = 1

7.net.ipv4.tcp_syn_retries参数

该参数的作用于上一个参数类似,设置内核放弃建立连接之前发送SYN包的数量,他的赋值和上一个参数一样即

可:net.ipv4.tcp_syn_retries = 1

二、针对处理器(CPU)的Nginx配置优化的2个指令

1.worker_processes指令

设置Nginx服务的进程数。官方建议设置为1

双核CPU worker_processes = 2;

四核CPU worker_processes = 4;

设置好worker_processes 指令之后,就很有必要设置worker_cpu_affinity指令

2、worker_cpu_affinity指令

该指令用来为每个进程分配CPU的工作内核。

以Nginx服务的进程数为4,CPU是四核:

worker_cpu_affinity 0001 0100 1000 0010

以Nginx服务的进程数为8,CPU是四核:

worker_cpu_affinity 0001 0100 1000 0010 0001 0100 1000 0010

三、针对网络连接的4个指令配置

1、keepalive_timeout

用于设置Nginx服务器与客户端保持连接的超时时间

keepalive_timeout 60 50;

该设置表示Nginx服务器与客户端连接保持活动的时间是60s,60s后服务器与客户端断开连接,使用Keep-Alive消息头保

持与客户端某些浏览器的连接时间为50s,50s后浏览器主动与服务器断开连接。

2、send_timeout

该指令用于设置Nginx服务器响应客户端超时时间,这个超时时间针对两个客户端和服务器端建立连接后,某次活动之间

的时间,如果这个时间后没有任何活动,Nginx服务器将会关闭连接。此指令的设置需要考虑服务器访问数量和网络等方

面。

send_timeout 10s;

该设置表示Nginx服务器与客户端连接后,某次会话中服务器等待客户端响应超过10s,就会自动关闭连接。

3、client_header_buffer_size

该指令用于设置Nginx服务器允许的客户端请求头部的缓冲去大小,默认为1KB。

client_header_buffer_size 4k;

4、multi_accept

该指令用于配置Nginx服务器是否尽可能多的接收客户端的网络连接请求,默认值为off。

四、与事件驱动模型相关的8个指令配置

1.use指令

use指令用于指定Nginx服务器使用的事件驱动模型

2.worker_connections

用于设置Nginx服务器的每个工作进程允许同时连接客户端的最大数量。

语法为:worker_connections number

number 为设置的最大数量

3.worker_rlimit_sigpending

该指令用于设置Linux2.6.6-mm2版本之后Linux平台的事件信号队列长度上限。

语法为:worker_rlimit_sigpendinglimit

limit 为Linux平台事件信号队列的长度上限值。

该指令主要影响事件驱动模型中rtsig模型可以保存最大信号数。

4.devpoll_changes 和devpoll_events

这两个指令用于设置在/dev/poll事件驱动模式下Nginx服务器可以与内核之间传递事件的数量,前者设置传递给内核的事

件数量,后者设置从内核获取的事件数量。

语法为:devpoll_changes number

devpoll_events number

number 为要设置的数量,默认值是512

5.kqueue_changes 和kqueue_events

这两个指令用于设置在kqueue事件驱动模式下Nginx服务器可以与内核之间传递事件的数量,前者设置传递给内核的事件

数量,后者设置从内核获取的事件数量。

语法为:kqueue_changes number

kqueue_events number

number 为要设置的数量,默认值是512

使用kqueue_changes方式,可以设置与内核之间传递事件的数量

6.epoll_events

用于设置在epoll事件驱动下Nginx 服务器可以与内核之间传递事件的数量。

语法为:epoll_changesnumber

[b]number [/b]为要设置的数量,默认值是512

7.rtsig_signo

该指令用于设置rtsig模式使用的两个信号中的第一个,第二个信号是在第一个信号的编号上加1。

语法为:rtsig_signo

默认第一个信号设置为SIFRTMIN + 10

8.rtsig_overflow_*

该指令代表三个具体的指令,分别为rtsig_overflow_events指令、rtsig_overflow_test指令、rtsig_overflow_threshold指

令。

这些指令用来控制当rtsig模式中信号队列溢出时Nginx服务器的处理方式。

语法为: rtsig_overflow_* number

number 是要设定的值。

rtsig_overflow_events 指令指定队列溢出时使用poll库处理的事件数,默认值为16.

rtsig_overflow_test指令指定poll库处理完第几件事件后将清空rtsig模型使用的信号队列,默认值为32.

rtsig_overflow_threshold 指令指定rtsig 模式使用的信号队列中的事件超过多少时就需要清空队列了。该指令只对Linux

2.4x及以下版本有效,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: