nginx 进阶

一、防刷/限流:nginx + lua 用于对于撞库、刷单进行IP的拦截,定义频次,白名单nginx

二、配置优化缓存

worker process:不能超过CPU的核数,通常2-4个,默认为4,过多会致使CPU使用太高。若是有阻塞的IO,能够适当增长数量,提升处理效率。服务器

worker connections:每一个worker维护的链接数,当你使用的端口即将耗尽,能够适当增长链接数,默认1024,通常状况下打开2个链接获取网站资源,也就最多处理512个用户并发。 默认的keepalive-timeout是65 。网络

CPU优先级: 操做系统的 CPU 调度器处理负载均衡的能力要远远超过 ,若是负载均衡有问题,可使用调度器工具。并发

Keep alive: 容许客户端维护与服务器已经建立的链接进行一批请求的处理直到指定的超时时间到达 。 Nginx可以很好的处理空闲的链接 , Nginx的做者声称10,000个空闲的链接智慧使用2.5兆内存(unbelievable), 为何keep alive有着如此巨大的影响, 应该是显而易见的, 那就是你避免为全部的HTTP请求建立各自的链接, 这是很是低效的. 也许你不须要把keepalive-timeout设置为65, 可是10-20应该是比较通用的选择,正如上面一段所说, Nginx会很好的处理这方面。负载均衡

硬件限制: 服务器主要还有3个方面的瓶颈. CPU,内存和IO ,CPU,内存很是高,IO是弊端。 为了不IO瓶颈, 咱们须要大量的减小nginx对硬盘驱动器的读写, 经过修改Nginx的行为,以减小磁盘写操做,以及确保对nginx的内存限制,容许它避免磁盘访问 。工具

Access Log:若是不对这些日志进行统计,能够关闭,避免对磁盘进行操做,若是要访问,能够考虑存在内存,减小IO操做。性能

Error Log:对问题的定位,须要保持一致打开。优化

Buffers:设置缓存大小, 若是缓存大小设置的过小, Nginx将不得不把上游(用英文upsteams会更好)的相应结果存放到临时的缓存文件里面,这将会同时增长IO的读写操做, 并且流量越大问题越多。client_body_buffer_size指令用来指定处理客户端请求的缓冲区大小,?这个表明了访问请求的body. 这是用来处理POST的数据,也就是经过提交表单,文件上传等请求的数据. 若是你须要处理不少大的POST请求的,你必须确保缓存区要设置的足够大.网站

完全移除磁盘IO:减小磁盘IO无心是不适用磁盘。若是数据量少,能够彻底放在内存,避免由于IO差生阻塞。对于数据量大的,会缓存频繁访问的磁盘扇区,更大的内存能够下降IO的使用,意味着能够经过增大内存解决IO的问题。

网络IO:

假设你有了足够大的内存来缓存你的全部数据. 这意味着理论上你的IO读速度达到了3-6gbps. 可是你没有那么快的网络通道. 不幸的是,咱们能够优化的网络IO是有限的,咱们要经过网络传输数据,因此还将受制于网络IO. 惟一真正有效的方法是尽可能减小数据量或压缩。

幸运的是Nginx提供了gzip模块, 它可使咱们在将数据传输给客户端以前压缩它, 这将大大减小数据的大小. 通常来讲 gzip_comp_level的值不会在性能方面有多大的差异,设为为4-5便可. 一味的增长它是没有意义的只是浪费的CPU的周期.

相关文章
相关标签/搜索