Nginx 의 흐름 제한 방안

1222 단어 luanginx
배경
추첨 인 터 페 이 스 는 높 은 병행 지연 시스템 이 nginx 를 통 해 흐름 을 제한 하 는 것 을 방지 하기 위해 최대 100 명의 사용자 가 들 어 와 추첨 을 100 개 이상 할 수 있 으 면 기본적으로 당 첨 되 지 않 은 것 으로 돌아 갑 니 다.
이루어지다
lua 코드
# init_r.lua
local shared_data = ngx.shared.dict
shared_data:set("draw", 0)

# draw_r.lua
local request_uri = ngx.var.request_uri;
if string.sub(request_uri,1,22) == "/activity/lottery/draw" then
local val, err = ngx.shared.dict:incr("draw", 1); #          1
if val > 100 then #  100
ngx.say("{\"success\" : true,\"data\" : {\"awardType\" : \"00\" }}")
ngx.log(ngx.ERR,"draw limit val is:"..val)
return ngx.exit(200)
end
return
end

# draw_decr.lua
local request_uri = ngx.var.request_uri;
if string.sub(request_uri,1,22) == "/activity/lottery/draw" then
local newval, err = ngx.shared.dict:incr("draw", -1); #         
if newval < 0 then
ngx.shared.dict:set("draw", 0);
end
return
end

nginx 설정
init_by_lua_file /etc/nginx/init_r.lua;


location / {
        default_type application/json;
        rewrite_by_lua_file /etc/nginx/draw_r.lua;
        log_by_lua_file /etc/nginx/draw_decr.lua;
  }

좋은 웹페이지 즐겨찾기