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"

原文地址:https://www.cnblogs.com/xiangsikai/p/9173654.html