前言
我们在上一篇文章中介绍了如何通过gzip命令来减小传输体积,减小数据传输时间,提升用户体验。
Nginx还有很多其他的参数可以提高响应速度,改善用户体验,我们在本篇文章中简单的介绍几个最常用优化指令。
优化措施
一位伟人曾经说过;
没有任何性能问题是增加一台机器解决不了的,如果还没有结局,那就再增加一台。
但是增加一台机器会带来很大的财务压力以及运维压力,我们更希望从软件本身方便进行优化,最大力度的榨干服务器性能,降低硬件成本和运维成本。
我们从以下几个方面来介绍常用的优化措施:

CPU优化
我们可以通过修改Nginx中CPU相关指令来提升服务器的性能。
这里主要涉及到两个指令,分别是worker_processes和worker_cpu_affinity指令。
worker_processes指令
这个指令用来设置Nginx的worker进程数量。我们在本系列文章的开始时候就介绍过,Nginx是一种Master-Worker机制,真正干活的是worker进程,所以适当的提高worker进程的数量,可以提高服务器处理请求的速度。但是worker进程的数量也不是越多越好,worker进程数量太多的话会增加CPU切换进程的负担,一般建议设置为和当前服务器核心数量相同。
worker_cpu_affinity指令

我们先看一下affinity的意思是亲和力。那么cpu_affinity就是cpu亲和力。那么什么是cpu亲和力呢?
这个概念是对于进程来说的。我们知道,在现代的多核处理器上面,OS在多次调度同一个进程的时候,可能将进程分配到不同的处理器上面进行处理,这样就可能导致进程的缓存不可用,会增加进程执行的时间。所以就产生了cpu亲和力这个东西,这个功能可以把一个进程和一个处理核绑定在一起,这样就可以充分利用CPU的缓存,提高缓存命中率,加快进程的执行速度。
它的值是一个二进制,对应物理核心数量,置1的那一位表示绑定到该物理核。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
缓存控制
对于任何一个优秀的软件来说,都离不开缓存buffer。在Nginx中对buffer处理的方法都比较一致,一般情况下我们设置单个buffer的大小以及使用buffer的数量。如果单个buffer不够,那么继续分配buffer,直到达到指定数量。如果还不够,还可能使用临时文件来保存。这里就要尽量的避免开辟临时文件,这样可以保证所有的内容都保存在内存中,可以提高响应速度。
我们要合理的评估相关内容的大小,分配适应的缓存。
和buffer相关的几个常用配置指令如下:
client_max_body_size:客户端请求服务器最大的body大小client_body_buffer_size:Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中client_header_buffer_size: 指定用于请求header的缓存区大小
此外还有很多类似的buffer大小,功能都是大同小异。
超时时间
这个时间用于控制一些时间参数,比如从客户端接收请求头的时间,接收请求体的时间,反向代理服务器接收请求内容的时间等等。通过对他们设置一些合理的值,可以让一些请求直接结束。
常用的超时时间有下面几个:
client_body_timeout : 客户端和服务器建立连接之后接收一个完整body体的时间。
client_header_timeout: 服务器接收一个完整的请求header的时间
总结
Nginx还有很多优化的参数,但是总体上可以分为上面几类,大家在使用的过程中要多多总结,多多领会。