zoukankan      html  css  js  c++  java
  • Nginx 优化

    Nginx 优化:nginx 主配置文件下nginx.conf


    进程优化

    # 工作进程数
    worker_processes 2;
    
    注:一般设置cpu核心数相同。
    注:worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
    # 测试启动进程数
    [root@localhost ~]# ps -aux | grep nginx | grep -v grep
    root       2325  0.0  0.0  46364  1112 ?        Ss   6月07   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
    nginx      2326  0.0  0.0  46764  2164 ?        S    6月07   0:00 nginx: worker process
    nginx      2327  0.0  0.0  46764  2160 ?        S    6月07   0:00 nginx: worker process
    测试启动进程数

    # Nginx最多可以打开文件数
    worker_rlimit_nofile 65535;
    
    注:这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
    # 本地可打开的最大描述符
    [root@localhost ~]# ulimit -n
    1024
    查看本地可打开的最大描述符
    #------------------------------------------------
    
    使用ulimit -a 可以查看当前系统的所有限制值
    使用ulimit -n 可以查看当前的最大打开文件数
    
    #------------------------------------------------
    /etc/security/limits.conf最后增加:
    
    *               soft    nofile          65535
    
    *               hard    nofile          65535
    
    *               soft    noproc          65535
    
    *               hard    noproc          65535
    
    #------------------------------------------------
    
    reboot 重启
    
    #------------------------------------------------
    修改本地打开最大描述符

    Nginx 事件处理模型优化

    events {
    
    # 采用epoll多路复用时间模型,处理效率高。
    use epoll;
    
    # 单个进程允许客户端最大连接线程数
    worker_connections 65535;
    
    # 告诉nginx收到一个新连接通知后接受尽可能多的连接
    multi_accept on;
    
    }
    注:worker_connections 这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了!
    注:multi_accept 默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。

    高效传输模式优化

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

    连接超时时间优化

    • 主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的。
    • 查看系统分页命令:getconf PAGESIZE
    # 客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接
    keepalive_timeout 60;
    
    # 也是防止网络阻塞,不过要包涵在keepalived参数才有效
    tcp_nodelay on;
    
    # 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
    client_header_buffer_size 4k;
    
    # 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
    open_file_cache max=102400 inactive=20s;
    
    # 这个是指多长时间检查一次缓存的有效信息。
    open_file_cache_valid 30s;
    
    # open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
    open_file_cache_min_uses 1;
    
    # 设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误
    client_header_timeout 15;
    
    # 设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示
    client_body_timeout 15;
    
    # 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
    reset_timedout_connection on;
    
    # 响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx关闭连接
    send_timeout 15;
    
    # 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
    server_tokens off;
    
    # 上传文件大小限制
    client_max_body_size 10m;

    Nginx gzip 调优

    • 1、gzip压缩功能,节约带宽,加速传输速度,节约成本。
    • 2、Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate
    • 3、一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!
    # 开启压缩功能
    gzip on;
    
    # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。
    gzip_min_length 2k;
    
    # 压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
    gzip_buffers    4 32k;
    
    # 压缩版本,用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
    gzip_http_version 1.1;
    
    # 压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。
    gzip_comp_level 6;
    
    # 用来指定压缩的类型,‘text/html’类型总是会被压缩,不能用通配符 text/*。
    gzip_types text/plain application/x-javascript application/css text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

    # varyheader支持,改选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过nginx压缩的数据 gzip_vary on; # 功能:针对代理请求如何进行压缩,any标识无条件启用压缩 gzip_proxied any;

    测试语句: curl -I -H"accept-encoding:gzip" "xxx.xxx.xxx/xxx/xxx.html"

  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/9173654.html
Copyright © 2011-2022 走看看