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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

今天我们这里说说限流。一般会在应用层配合redis做限流策略,这里我们聊聊nginx层限流。

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

限流一般有三种: 计数器 、漏桶算法、令牌桶算

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

1.先说下nginx里面配置直接返回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个请求。

超过限流,默认返回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 限流,以及nginx直接返回json格式数据_第1张图片

限流后返回结果

nginx 限流,以及nginx直接返回json格式数据_第2张图片

至此nginx限流搞定

转载于:https://my.oschina.net/likaixuan0/blog/3046532

你可能感兴趣的:(nginx 限流,以及nginx直接返回json格式数据)