Nginx 优化
Nginx 优化:nginx 主配置文件下nginx.conf
进程优化
# 工作进程数 worker_processes 2; 注:一般设置cpu核心数相同。 注:worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 测试启动进程数 [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的值保持一致。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 本地可打开的最大描述符 [root@localhost ~]# ulimit -n 1024
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#------------------------------------------------ 使用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"