nginx配置文件中影响nginx高并发性能的一些参数:
一、worker_processes 6; #nginx进程数,建议设置为等于CPU总核心数,这时设置为几,在进行top监控的时候就能看到高负载时就会打开几个nginx进程。可通过lscpu命令查看服务器里有几个核(先看几个CPU,以及每个CPU是几核)
一般为当前机器总cpu核心数的1到2倍。如,我的机器为双核,那么开4个足够了。
二、worker_connections 65535; #单个进程最大连接数(服务器的最大连接数=单个进程最大连接数最大进程个数)默认的值是1024,这个值太小的后果就是你的系统会报:too many open files 等这样的错误导致你系统死掉。一般给到服务器后最好通过ulimit命令结合修改/etc/security/limits.conf(增加 soft nofile = * hard nofile=)两个配置值,将其设置得更大。
三、keepalive_timeout 120; #长连接超时时间,单位是秒。这个keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要等待keepalive_timeout秒后,才开始关闭这个连接。当httpd守护进程发送完一个响应后,会马上主动关闭相应的tcp连接(keepalive_timeout设为0的效果),如设置keepalive_timeout后,httpd守护进程等待keepalive_timeout时间。实现复用。
四、gzip on; 通过测试一个5000多bytes的json数据在经过压缩只后只有700多bytes,压缩效率可达7倍。有效降低带宽的使用,加快响应速度。
五、tcp_nopush on; #防止网络阻塞;tcp_nodelay on; #防止网络阻塞。这两个指令也许是最难理解的nginx配置, 他们对于nginx的影响在网络的较低层. 你可以简单的认为这些指令决定了操作系统如何处理网络缓存和他们何时将这些缓存输出到最终用户(客户端). 我只能建议大家如果你之前不了解这些概念你最好不要动它. 他们不会显著的改善或者改变性能, 所以最好使用他们的默认值.
六、Access Logs,Error Logs,Open File Cache:默认情况下,Nginx的每个请求都会记录在磁盘上的日志文件中,你可以使用这个方法进行统计,安全问题检查等, 带着这会在一定程度上带来IO使用成本. 目标就是尽量减少磁盘IO(在数据读取时多使用内存,进程间通信使用共享内存)。
七、Buffers:配置Nginx缓存的大小是一个非常重要的事情. 如果缓存大小设置的太小, Nginx将不得不把上游(用英文upsteams会更好)的相应结果存放到临时的缓存文件里面,这将会同时增加IO的读写操作, 而且流量越大问题越多.
client_body_buffer_size指令用来指定处理客户端请求的缓冲区大小, 这个代表了访问请求的body. 这是用来处理POST的数据,也就是通过提交表单,文件上传等请求的数据. 如果你需要处理很多大的POST请求的,你必须确保缓存区要设置的足够大.fastcgi_buffers 和 proxy_buffers 指令用来处理上流(upstream)的响应结果, 也就是PHP Apache等.它的概念其实和上面提到的差不多, 如果缓冲区不足够大数据将在返回给用户使用之前被保存到磁盘上.
注意Nginx将这个buffer数据同步的传输给客户端之前,有一个缓存上限, 保存到磁盘也同样受限. 这个上线是通过fastcgi_max_temp_file_size和proxy_max_temp_file_size来设置的. 另外对于代理的连接你也可以通过把proxy_buffering设置成off来彻底的关闭缓存.(通常这不是一个好办法).