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

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

今天我们这里说说限流。一般会在应用层配合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":"访问高峰期..."}';
        }

展示结果如下

正常返回结果

e1af715813d8a1a438ed1392dc4a00726d7.jpg

限流后返回结果

3fa550f1308c87e13311c092a963d55cd92.jpg

至此nginx限流搞定

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值