Nginx优化

针对CPU的配置优化

worker_processes指令

worker_processes指令用来设置Nginx服务的进程数。为了让多核CPU能够很好地并行处理任务,可以赋值为机器CPU的倍数。当然,这个值并不是越大越好,Nginx进程太多可能增加主进程调度负担,也可能影响系统的IO效率。针对双核CPU,建议设置为2或4。笔者的机器为四核CPU,设置为:

worker_processes 4;

设置好worker_processes指令之后,就很有必要设置worker_cpu_affinity指令

worker_cpu_affinity指令

worker_cpu_affinity指令用来为每个进程分配CPU的工作内核,来减少切换cup所带来的性能消耗。worker_cpu_affinity指令的值是由几组二进制值表示的。其中,每一组代表一个进程,每组中的每一位表示该进程使用CPU的情况,1代表使用,0代表不使用。二进制位排列顺序和CPU的顺序是相反的。建议将不同的进程平均分配到不同的CPU运行内核上。

笔者设置Nginx服务的进程数为4,CPU是四核,因此会有四组值,并且每组有四位,所以,此指令的设置为:

worker_cpu_affinity 0001 0010 0100 1000 

四组二进制数值分别对应4个进程,第一个进程对应0001,表示使用第一个CPU内核;第二个进程对应0010,表示使用第二个CPU内核,以此类推。

此指令只能在全局块中进行配置。

解读:nginx的一个神秘配置worker_cpu_affinity - 咖啡色的羊驼 - CSDN博客
http://blog.csdn.net/u011957758/article/details/50959823

通过gzip压缩来减少传输流量

在服务器端压缩,然后在浏览器端解压

gzip指令

该指令用于开启或者关闭Gzip功能

gzip on | off

默认情况下,该指令设置为off,即不启用Gzip功能。只有将该指令设置为on时,下列各指令设置才有效。

gzip_buffers指令

该指令用于设置Gzip压缩文件使用缓存空间的大小。

gzip_buffers number size;
  • number,指定Nginx服务器需要向系统申请缓存空间的个数
  • size,指定每个缓存空间的大小

Nginx服务器在对响应输出数据进行Gzip压缩时需向系统申请number*size大小的空间用于存储压缩数据。默认情况下number*size的值为128,其中size的值取系统内存页一页的大小,为4KB或者8KB。

gzip_buffers 32 4k | 16 8K;

gzip_comp_level指令

该指令用于设定Gzip压缩程度,包括级别1到9。级别1表示压缩程度最低,消耗CPU小;级别9表示压缩程度最高,消耗CPU越大,最费时间。

gzip_comp_level level;

level的默认值为1。

gzip_min_length指令

Gzip压缩功能对大数据的压缩效果明显,但是如果压缩很小的数据,可能出现越压缩数据量越大的情况(很多压缩算法都有这样的情况发生),因此应该根据响应页面的大小,选择性的开启或者关闭Gzip功能。该指令设置页面的字节数,当响应页面的大小大于该值时,才启用Gzip功能。

gzip_min_length length;

默认设置为20,设置0时不管响应页面大小如何统统压缩。笔者建议将该值设置为1KB或以上,以防止出现数据越压越大的情况。

gzip_min_length 1024;

gzip_types指令

Nginx服务器可以根据响应页的MIME类型选择性地开启Gzip压缩功能。该指令用来设置MIME类型,被设置的类型将被压缩。

gzip_types mime-types ...;

mime-type变量的取值默认为text/html,但实际上,在gzip指令设置为on时,Nginx服务器会对所有的text/html类型页面数据进行Gzip压缩。该变量还可以取“*”,表示对所有MIME类型的页面数据进行Gzip压缩。一般情况下我们压缩常规的文件类型时,可以设置为

gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css text/html application/xml;

gzip指令可以放在http全局块中也可以放在server块中。

你可能感兴趣的:(nginx)