nginx之旅(第六篇):nginx优化--nginx优化目的、工作进程优化、长连接设置、数据压缩、客户端缓存

nginx之旅(第六篇):nginx优化--nginx优化目的、工作进程优化、长连接设置、数据压缩、客户端缓存

一、Nginx优化目的

标准情况下,软件默认的参数都是对安装软件的硬件标准来设置的,目前我们服务器的硬件资源远远大于要求的标准,所以为了让服务器性能更加出众,充分利用服务器的硬件资源,我们一般需要优化APP的并发数来提升服务器器的性能。

二、工作进程优化

1) worker_processes

worker_processes指Nginx的工作进程,这个值是直接受到服务器CPU核数量影响的(当然也有其他影响),Nginx默认配置为auto,意思是会自动检测CPU核做修改,建议worker_processes的值直接修改为CPU的核数。

 

Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l

worker_processes 4;

  

 

2)worker_cpu_affinity

为每个进程分配cpu,一般是一个cpu一个进程

双核配置

worker_processes 2;worker_cpu_affinity 0101 1010;

  

比如4核配置:

worker_processes 4;worker_cpu_affinity 0001 0010 0100 1000;

  

比如8核配置:

worker_processes 8;worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;

  

worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。

 

通过

ps -eo psr,pid,args |grep 'nginx'

  

命令查看nginx进程在cpu的分配情况

3)worker_connections

Nginx Web服务器可以同时提供服务的客户端数。与worker_processes结合使用时,获得每秒可以服务的最大客户端数

总并发= worker_processes* worker_connections

为了最大化Nginx的全部潜力,应将工作者连接设置为核心一次可以运行的允许的最大进程数1024。

 

放置位置:events 标签  

events {
    worker_connections  1024;    #一个worker进程的并发
}
 

  

 

三、长连接设置

设置长连接是为了减少服务器维护因为与客户端建立http连接产生的大量tcp三次握手四次断开的开销,主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的。

keepalived_timeout :客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接。值为0会禁用keep-alive客户端连接。

keepalive_requests指令用于设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。这个参数的真实含义,是指一个keep alive建立之后,nginx就会为这个连接设置一个计数器,记录这个keep alive的长连接上已经接收并处理的客户端请求的数量。如果达到这个参数设置的最大值时,则nginx会强行关闭这个长连接,逼迫客户端不得不重新建立新的长连接。

大多数情况下当QPS(每秒请求数)不是很高时,默认值100凑合够用。但是,对于一些QPS比较高(比如超过10000QPS,甚至达到30000,50000甚至更高) 的场景,默认的100就显得太低。 简单计算一下,QPS=10000时,客户端每秒发送10000个请求(通常建立有多个长连接),每个连接只能最多跑100次请求,意味着平均每秒钟就会有100个长连接因此被nginx关闭。同样意味着为了保持QPS,客户端不得不每秒中重新新建100个连接。因此,就会发现有大量的TIME_WAIT的socket连接(即使此时keep alive已经在client和nginx之间生效)。因此对于QPS较高的场景,非常有必要加大这个参数,以避免出现大量连接被生成再抛弃的情况,减少TIME_WAIT。

keepalive_timeout 60; 长连接超时时间
keepalive_requests 8192; 每个长连接接受最大请求数
​
 

  

四、数据压缩

nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送给客户端之前,nginx服务器会根据一些具体的策略实施压缩,以节省网站出口带宽,同时加快了数据传输效率,提升了用户的访问体验。

一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!

提升网站用户体验:由于发给用户的内容小了,所以用户访问单位大小的页面就快了,用户体验就提升了

节约网站带宽成本:由于数据时压缩传输的,因此,会消耗一些cpu资源

 

gzip on;                            #表示开启压缩功能
​
gzip_proxied any;                             #(nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩)
​
gzip_min_length  1k;                  #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大
​
gzip_buffers     4 32k;                 #压缩缓存区大小,设置压缩所需要的缓冲区大小,表示申请 4 个单位为 32K 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 
​
gzip_http_version 1.1;                #压缩版本,设置gzip压缩针对的HTTP协议版本
​
gzip_comp_level 6;                  #压缩比率, gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,
​
gzip_disable "MSIE [1-6]\.";                  #IE6及以下禁止压缩 
​
gzip_types  text/css text/xml application/javascript;  #指定压缩的类型,进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
​
gzip_vary on;                   #vary header支持, 是否在http header中添加Vary: Accept-Encoding,建议开启

  

其中

gzip_proxied expired/no-cache/no-store/private/auth/any; (选择一个)
# Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的 header头。  
# off - 关闭所有的代理结果数据的压缩  
# expired - 启用压缩,如果header头中包含 "Expires" 头信息  
# no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息  
# no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息  
# private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息  
# no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息  
# no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息  
# auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息  
# any - 无条件启用压缩  

  

五、客户端缓存

缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来, Expires缓存配置在server字段里面。

 

将部分数据缓存在用户本地磁盘,用户加载时,如果本地和服务器的数据一致,则从本地加载。提升用户访问速度,提升体验度。节省公司带宽成本。

 

缓存图片

expires指令:开启缓存并指定静态缓存时间

location ~*  \.(png|gif)$ {
              expires 1h;
         }

  

缓存图片、css、js等

location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
   expires 1d;
}
 

  

猜你喜欢

转载自www.cnblogs.com/Nicholas0707/p/12216121.html