清远东莞网站建设,太原金茂大厦做网站的,某企业集团网站建设方案论文,宁波seo排名如何优化Nginx 限流配置
Nginx是如何限流的。随着业务的扩散#xff0c;系统并发越来越高时#xff0c;有三样利器用来保护系统#xff0c;分别是缓存、降级和限流。
随着业务的扩散#xff0c;系统并发越来越高时#xff0c;有三样利器用来保护系统#xff0c;分别是缓存、降…Nginx 限流配置
Nginx是如何限流的。随着业务的扩散系统并发越来越高时有三样利器用来保护系统分别是缓存、降级和限流。
随着业务的扩散系统并发越来越高时有三样利器用来保护系统分别是缓存、降级和限流。
缓存缓存是现在系统中必不可少的模块并且已经成为了高并发高性能架构的一个关键组件缓存的目的是提升系统访问速度和增大系统处理容量。
降级这个在天猫双 11 的时候非常常见降级是当服务出现问题或者影响到核心流程时需要暂时屏蔽掉待高峰或者问题解决后再打开。
限流限流的目的是通过对并发访问 / 请求进行限速或者对一个时间窗口内的请求进行限速来保护系统一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理 nginx中设置参数limit_req_zone
1.1 定义用于限制单一的 IP 地址的请求的处理速率即速率限制。
1.2 使用方法 在 http 中添加 limit_req_zone $binary_remote_addr zoneone:10m rate1r/s;
第一个参数$binary_remote_addr 表示通过remote_addr这个标识来做限制“binary_”的目的是缩写内存占用量是限制同一客户端ip地址。
第二个参数zoneone:10m 表示生成一个大小为10M名字为one的内存区域用来存储访问的频次信息。
第三个参数rate1r/s表示允许相同标识的客户端的访问频次这里限制的是每秒1次还可以有比如30r/m的。
在 server 中添加 limit_req zoneone burst5 nodelay;
第一个参数zoneone 设置使用哪个配置区域来做限制与上面limit_req_zone 里的name对应。 第二个参数burst5重点说明一下这个配置burst爆发的意思这个配置的意思是设置一个大小为5的缓冲区当有大量请求爆发过来时超过了访问频次限制的请求可以先放到这个缓冲区内。 第三个参数nodelay如果设置超过访问频次而且缓冲区也满了的时候就会直接返回503如果没有设置则所有请求会等待排队。
1.3 测试效果
我们先来个未配置 nginx 限流的 ab 压测结果. 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统一旦达到限制速率则可以拒绝服务
以防止非预期的请求对系统压力过大而引起的系统瘫痪友好点比如直接返回相应的 json 或则页面提示用户访问高峰稍后再试
限流一般有三种计数器 、漏桶算法、令牌桶算
关于限流算法不是本文讨论范围定义网上有大把介绍
1. 先说下 nginx 里面配置直接返回 json 如何操作。 location /json/ { default_type application/json; add_header Content-Type text/html; charsetutf-8; return 200 {code:6666,msg:访问高峰期...}; }Nginx 限流配置案例
#限流 limit_req_zone $binary_remote_addr zonemyRateLimit:10m rate2r/s;
location / { #限流 limit_req zonemyRateLimit burst2 nodelay; root html; index index.html index.htm; } 名词解释
第 1 个参数:limit_req_zone 定义在 http 块中$binary_remote_addr 表示保存客户端 IP 地址的二进制形式。
第 2 个参数Zone 定义 IP 状态及 URL 访问频率的共享内存区域。zonekeyword 标识区域的名字以及冒号后面跟区域大小。16000 个 IP 地址的状态信息约 1MB所以示例中区域可以存储 160000 个 IP 地址。
第 3 个参数Rate 定义最大请求速率。示例中速率不能超过每秒 2 个请求。
超过限流默认返回 503 状态。
然后我们在 503 错误页面配置返回相应 json 或者 html 页面即可。这里我们返回 json
error_page 503 /503; location /503 { default_type application/json; add_header Content-Type text/html; charsetutf-8; return 200 {code:6666,msg:访问高峰期...}; }