nginx 限流,以及nginx直接返回json格式数据

高并发系统有三把利器用来保护系统:缓存、降级和限流html

今天咱们这里说说限流。通常会在应用层配合redis作限流策略,这里咱们聊聊nginx层限流。node

限流的目的是经过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则能够拒绝服务,以防止非预期的请求对系统压力过大而引发的系统瘫痪(友好点好比直接返回相应的json或则页面提示用户访问高峰,稍后再试)nginx

限流通常有三种: 计数器 、漏桶算法、令牌桶算redis

关于限流算法不是本文讨论范围,定义网上有大把介绍算法

1.先说下nginx里面配置直接返回json如何操做。json

location /json/ {
	    default_type application/json;
	    add_header Content-Type 'text/html; charset=utf-8';
	    return 200 '{"code":"6666,"msg":"访问高峰期..."}';
        }

Nginx限流配置缓存

#限流
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s;

location / { 
            #限流
            limit_req zone=myRateLimit burst=2 nodelay;
            root   html;
            index  index.html index.htm;
        }

名词解释:并发

第1个参数:limit_req_zone定义在http块中,$binary_remote_addr表示保存客户端IP地址的二进制形式。
第2个参数:Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,因此示例中区域能够存储160000个IP地址。
第3个参数:Rate定义最大请求速率。示例中速率不能超过每秒2个请求。app

超过限流,默认返回503状态高并发

而后咱们在503错误页面配置返回相应json或者html页面便可。这里咱们返回json

error_page 503 /503;
	location = /503 {
            default_type application/json;
	        add_header Content-Type 'text/html; charset=utf-8';
	        return 200 '{"code":"6666,"msg":"访问高峰期..."}';
        }

展现结果以下

正常返回结果

限流后返回结果

至此nginx限流搞定

相关文章
相关标签/搜索