5.Nginx高级配置

438 阅读5分钟

5.1 针对IPV4的7个参数配置优化

这里的参数与IPV4网络有关的Linux内核参数,可追加到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

记录未收到客户端确认信息的连接请求最大值。拥有128MB内存的系统默认值为1024,小于128MB的系统默认值为128,一般在内存充足情况下可优化:net.ipv4.tcp_max_syn_backlog = 262144

5. net.ipv4.tcp.timestamps

设置时间戳,可避免序列号的卷绕。一般建议赋值为0,禁用对TCP时间戳的支持:net.ipv4.tcp.timestamps = 0

6. net.ipv4.tcp_synack_retires

用于设置放弃TCP连接之前向客户端发送SYN+ACK包的数量。为了建立连接,服务端和客户端要进行三次握手,第二次握手期间,内核需要发送SYN并附带一个回应前一个SYN的ACK,这个参数主要影响这个过程,一般赋值为1,即放弃连接之前发送一次SYN+ACK包:net.ipv4.tcp_retires = 1

7.net.ipv4.tcp_syn_retires

设置放弃建立连接之前发送SYN包数量,建议赋值为1:net.ipv4.tcp_syn_retires = 1

5.2针对CPU的优化的两个指令

1.worker_processes

worker processes 4;

  • 设置nginx进程数,官方推荐设置为1,过多会影响系统IO效率,降低性能。在多核CPU情况下,我们可以适当增加,让资源更好的利用,双核: 2/4
2.worker_cpu_affinity

用来分配每个CPU的工作内核。以2进制的方式表示

eg: worker process 4;,此时有 4个进程,我们可设置:worker_cpu_affinity 0001 0100 1000 0010;

5.3 与网络连接有关的4个指令

1.keepalive_timeout

在前面3.3 的10 配置超时时间有讲

2.send_timeout

用于设置服务器响应客户端的超时时间,仅针对建立连接后某次活动之间的时间,若是超过这个时间没有任何活动,则服务器会关闭连接。

eg:send_timeout 10s

3.client_header_buffer_size

设置服务器允许客户端头部的缓冲区大小,默认为1KB,可根据系统分页大小来设置。

获取系统分页大小:#getconf PAGESIZE

有些时候Nginx服务器返回400错误并且在日志中看不到任何提示信息,大部分情况是客户端请求头过大的原因。

建议赋值为 4kb: client_header_buffer_size 4k;

4.multi_accept

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

5.4 事件驱动模型相关8个指令

1.user

指定事件驱动模型

2.worker_connections

每个进程允许同时连接的最大客户端数量(前面提过语法)

建议设置:worker_connections 65535;

3.worker_rlimit_sigpending

设置事件信号队列长度上限:worker_rilimit_sigpending limit (limit 为设置的上限值)

该指令主要影响事件驱动模型中rtsig模型可保存的最大信号数,根据实际客户端并发请求数量和服务器运行环境处理能力设定

4.devpoll_changes 和 devpoll_events

设置/dev/poll事件驱动模式下服务器与内核之间传递事件的数量,默认值为 32

devpoll_changes number : 设置传递给内核的事件数量

devpoll_events number:设置从内核获取的事件数量

5.kequeue_changes 和 kqueue_events

用于设置kqueue事件下服务器与内核之间传递事件的数量,默认值512

kequeue_changes number : 设置传递给内核的事件数量

kequeue_events number:设置从内核获取的事件数量

6.epoll_events

设置epoll事件驱动下 服务器与内核事件传递的数量,epoll事件驱动模式下 服务器 <——>内核 的事件传递数量是相同的。

epoll _change number (number默认值为512)

7.rtsig_signo指令

设置rtsig模式使用的两个信号中的第一个,第二个信号在第一个信号的编号上加1

rtsig_signo signo ,(默认第一个信号设置为 SIGRTMIN+10)

8.rtsig_overflow_*

该指令具体有三个指令:rtsig_overflow_events 、 rtsig_overflow_test 和 rtsig_overflow_threshold

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

rtsig_overflow_* number

number:要设定的值

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

rtsig_overflow_test:指定poll库处理完第几件事件后情况rtsig模型使用的信号队列,默认为32

rtsig_overflow_threshold:指定rtsig模式使用的信号队列中事件超过多少时就清空队列。

5.5 后端服务组件配置指令

1.upstream
  • 语法:upstream name{...}

    name:后端服务器组起的名字

  • 说明:其类似于http、server等模块,用于设置服务器组中包含的服务器以及调度方法指令(默认是轮询:一个服务器请求处理出错时,请求会交给下一个服务器去处理,以此类推)

2.server指令
  • 语法:server address [parameters];

    address:服务器地址(可以是包含端口号的IP 或 是域名)

    parameters:配置的属性

    • weight = x , 权重
    • max_fails = number ,设置一个请求允许失败的次数(404不认为是请求失败),默认为1(若设置为0则无法检查服务器是否有效)
    • fail_time = time , 设置请求服务器的时间限制,(若服务器设置为down 则该值为0),默认为10s
    • backup , 设置服务器为备用机
    • down , 设置服务器为停用
3.ip_hash指令
  • 说明:负载均衡的算法之一,同一IP的请求都接到同一服务器中。
4.keepalive指令
  • 语法:keepalive connetctions

    connections :每一个工作进程允许保持空闲连接的上限,若超值则将最近少用的连接关闭

5.least_conn指令
  • 说明:负载均衡策略之一,将网络请求分配到连接最少的服务器上