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限流搞定

相關文章
相關標籤/搜索