美文网首页
Nginx 日常优化(二)

Nginx 日常优化(二)

作者: 心水Diana | 来源:发表于2019-03-06 10:03 被阅读0次

    高效传输模式

    http {
    ……
    sendfile on;
    tcp_nopush on;
    ……
    sendfile on;//开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用
    设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负
    载。
    注意:如果图片显示不正常把这个改成off。
    tcp_nopush on;必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的
    开始部分一起发送,而不一个接一个的发送。)
    

    连接超时时间

    主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的

    keepalive_timeout 10;
    tcp_nodelay on;
    client_header_timeout 15;
    client_header_buffer_size 4k;
    client_body_timeout 15;
    open_file_cache max=102400 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    send_timeout 15;
    server_tokens off;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    

    keepalived_timeout客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接,我们将它设置低些可以让
    ngnix持续工作的时间更长。
    tcp_nodelay;也是防止网络阻塞,不过要包涵在keepalived参数才有效,告诉nginx不要缓存数据,而是一段一段的发
    送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
    client_header_buffer_size 4k;
    客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于
    一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
    open_file_cache max=102400 inactive=20s;
    这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive 是指经过多长
    时间文件没被请求后删除缓存。打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的
    最大时间,这样我们可以在它们不活动超过20秒后清除掉。
    open_file_cache_valid 30s;
    这个是指多长时间检查一次缓存的有效信息。
    open_file_cache_min_uses 2;
    open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存
    中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
    open_file_cache_errors on;
    指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同
    文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。
    client_header_timeout设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,
    nginx将返回request time out的错误
    client_body_timeout设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面
    一样的错误提示
    reset_timeout_connection 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
    send_timeout 响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何
    活动,nginx关闭连接
    server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有
    好处的。
    client_max_body_size上传文件大小限制,请求和提交的文件最大不能超过10M,超过之后报错。
    

    内核参数

    fs.file-max = 999999:这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制
    最大并发连接数,需根据实际情况配置。
    net.ipv4.tcp_max_tw_buckets = 6000 #这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个
    数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器
    变慢。
    注:主动关闭连接的服务端会产生TIME_WAIT状态的连接
    net.ipv4.ip_local_port_range = 1024 65000 #允许系统打开的端口范围。
    net.ipv4.tcp_tw_recycle = 1#启用timewait快速回收。
    net.ipv4.tcp_tw_reuse = 1#开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。这对于服务器来说很有
    意义,因为服务器上总会有大量TIME-WAIT状态的连接。
    net.ipv4.tcp_keepalive_time = 30:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2
    小时,若将其设置的小一些,可以更快地清理无效的连接。
    net.ipv4.tcp_syncookies = 1#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理。
    net.core.somaxconn = 40960 #web 应用中 listen 函数的 backlog 默认会给我们内核参数的
    net.core.somaxconn 限制到128,而nginx定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
    注:对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后,我们可以看到端口的状
    态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了.每一个处于监听(Listen)状态的端口,都有自
    己的监听队列.监听队列的长度与如somaxconn参数和使用该端口的程序中listen()函数有关
    somaxconn参数:定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128,对于一个经常处理
    新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。大的侦听队
    列对防止拒绝服务 DoS 攻击也会有所帮助。
    net.core.netdev_max_backlog = 262144 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到
    队列的数据包的最大数目。
    net.ipv4.tcp_max_syn_backlog = 262144 #这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认
    为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请
    求。
    下面贴一个完整的内核优化:
    net.ipv4.tcp_rmem = 10240 87380 12582912#这个参数定义了TCP接受缓存(用于TCP接受滑动窗口)的最小值、默
    认值、最大值。
    net.ipv4.tcp_wmem = 10240 87380 12582912:这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、
    默认值、最大值。
    net.core.rmem_default = 6291456:这个参数表示内核套接字接受缓存区默认的大小。
    net.core.wmem_default = 6291456:这个参数表示内核套接字发送缓存区默认的大小。
    net.core.rmem_max = 12582912:这个参数表示内核套接字接受缓存区的最大大小。
    net.core.wmem_max = 12582912:这个参数表示内核套接字发送缓存区的最大大小。
    net.ipv4.tcp_syncookies = 1:该参数与性能无关,用于解决TCP的SYN攻击
    

    相关文章

      网友评论

          本文标题:Nginx 日常优化(二)

          本文链接:https://www.haomeiwen.com/subject/xjgzuqtx.html