国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

openResty+lua+redis實(shí)現(xiàn)接口訪問(wèn)頻率限制

這篇具有很好參考價(jià)值的文章主要介紹了openResty+lua+redis實(shí)現(xiàn)接口訪問(wèn)頻率限制。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

openResty簡(jiǎn)介:

OpenResty??是一個(gè)基于?Nginx?與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫(kù)、第三方模塊以及大多數(shù)的依賴(lài)項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。

OpenResty??通過(guò)匯聚各種設(shè)計(jì)精良的?Nginx?模塊(主要由 OpenResty 團(tuán)隊(duì)自主開(kāi)發(fā)),從而將?Nginx?有效地變成一個(gè)強(qiáng)大的通用 Web 應(yīng)用平臺(tái)。這樣,Web 開(kāi)發(fā)人員和系統(tǒng)工程師可以使用 Lua 腳本語(yǔ)言調(diào)動(dòng)?Nginx?支持的各種 C 以及 Lua 模塊,快速構(gòu)造出足以勝任 10K 乃至 1000K 以上單機(jī)并發(fā)連接的高性能 Web 應(yīng)用系統(tǒng)。

OpenResty??的目標(biāo)是讓你的Web服務(wù)直接跑在?Nginx?服務(wù)內(nèi)部,充分利用?Nginx?的非阻塞 I/O 模型,不僅僅對(duì) HTTP 客戶(hù)端請(qǐng)求,甚至于對(duì)遠(yuǎn)程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進(jìn)行一致的高性能響應(yīng)。

1、下載安裝openresty

下載安裝openresty。我使用的如下版本的

wget https://openresty.org/download/openresty-1.21.4.1.tar.gz

解壓文件:tar -zvxf?openresty-1.21.4.1.tar.gz

進(jìn)入文件夾下:cd ./openresty-1.21.4.1

執(zhí)行./configure

然后 make && make install

等待以上完成后。就可以到啟動(dòng)了。

具體啟動(dòng)的nginx服務(wù)目錄在?openresty-1.21.4.1/nginx/sbin下。

啟動(dòng)命令如下:

./openresty-1.21.4.1/nginx/sbin/nginx -c ./openresty-1.21.4.1/nginx/conf/nginx.conf

2、配置lua文件

在nginx.conf中配置限流lua文件。

在你要限流的接口下增加。

location /xxx{

access_by_lua_file /x/x/x/access_by_redis.lua;

proxy_pass http://xxxx/;

}

3、編寫(xiě)lua限流內(nèi)容

access_by_redis.lua文件內(nèi)容如下:

local function close_redis(red)
? ? if not red then
? ? ? ? return
? ? end
? ? --釋放連接(連接池實(shí)現(xiàn))
? ? local pool_max_idle_time = 10000 --毫秒
? ? local pool_size = 100 --連接池大小
? ? local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)

? ? if not ok then
? ? ? ? ngx_log(ngx_ERR, "set redis keepalive error : ", err)
? ? end
end

-- 連接redis
local redis = require('resty.redis')
local red = redis.new()
red:set_timeout(1000)

local ip = "127.0.0.1" ?---修改變量
local port = "6379" ---修改變量
local ok, err = red:connect(ip,port)
if not ok then
? ? return close_redis(red)
end
red:auth('密碼')
local clientIP = ngx.req.get_headers()["X-Real-IP"]
if clientIP == nil then
? ?clientIP = ngx.req.get_headers()["x_forwarded_for"]
end
if clientIP == nil then
? ?clientIP = ngx.var.remote_addr
end

--ngx.say(clientIP)

--if clientIP == "101.231.137.70" then
-- ? ?ngx.exit(ngx.HTTP_FORBIDDEN)
-- ? ? ? return close_redis(red)
-- ? ?end
local request_uri = ngx.var.request_uri

-- 限制條件:user:用戶(hù)ip:請(qǐng)求地址。做限制條件
local incrKey = "user:"..clientIP..":"..request_uri..":freq"
local blockKey = "user:"..clientIP..":block"

local is_block,err = red:get(blockKey) -- check if ip is blocked
--ngx.say(tonumber(is_block))
if tonumber(is_block) == 1 then
? ? --ngx.say(3)
? ? ngx.exit(403)
? ? --ngx.exit(ngx.HTTP_FORBIDDEN)
? ? close_redis(red)
end

inc ?= red:incr(incrKey)

--5秒內(nèi)有15次以上訪問(wèn)即視為非法,會(huì)阻止1分鐘的訪問(wèn)

if inc < 15 then
? ?inc = red:expire(incrKey,5)
end

if inc > 15 then
? ? red:set(blockKey,1) --設(shè)置block 為 True 為1
? ? red:expire(blockKey,60)
end

close_redis(red)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-678158.html

到了這里,關(guān)于openResty+lua+redis實(shí)現(xiàn)接口訪問(wèn)頻率限制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Openresty原理概念篇(九)LuaJIT分支和標(biāo)準(zhǔn)Lua有什么不同

    Openresty原理概念篇(九)LuaJIT分支和標(biāo)準(zhǔn)Lua有什么不同

    一??LuaJIT分支和標(biāo)準(zhǔn)Lua有什么不同 ①? 背景 luajit官方? ?標(biāo)準(zhǔn)lua官方? ?openresty自身維護(hù)的luajit? 編譯luajit ②??LuaJIT 在 OpenResty 整體架構(gòu)中的位置 ③?? 標(biāo)準(zhǔn) Lua 和 LuaJIT 的 關(guān)系 ④? 為什么 選擇LuaJIT ⑤? lua特別之處 pairs和ipairs看table的內(nèi)部結(jié)構(gòu) nil、ngx.null、cjson.null、user

    2024年02月11日
    瀏覽(16)
  • 開(kāi)源的API Gateway項(xiàng)目- Kong基于OpenResty(Nginx + Lua模塊)

    開(kāi)源的API Gateway項(xiàng)目- Kong基于OpenResty(Nginx + Lua模塊)

    Kong 是一個(gè)在 Nginx 內(nèi)運(yùn)行的開(kāi)源 API 網(wǎng)關(guān)和微服務(wù)抽象層。它是用于處理 API 流量的靈活、可擴(kuò)展、可插入的工具。 Kong 提供了以下功能: 用戶(hù)登錄 :Kong 提供了多種認(rèn)證插件,像 JWT、OAuth 2.0 等,可以滿(mǎn)足用戶(hù)登錄需求。 Token 管理 :使用上述認(rèn)證插件,Kong 可以有效地管理

    2024年01月23日
    瀏覽(25)
  • Openresty(二十二)ngx.balance和balance_by_lua終結(jié)篇

    Openresty(二十二)ngx.balance和balance_by_lua終結(jié)篇

    一? 灰度發(fā)布鋪墊 ①??init_by_lua* init_by_lua? ? init_by_lua_block ?? 當(dāng)配置重載時(shí),init_by_lua* 不會(huì)清空其內(nèi)的lua_shared_dict共享數(shù)據(jù) lua執(zhí)行系統(tǒng)命令方法os.execute和io.popen?? ???init_by_lua_file不能連接redis init_by_lua_file? ②? init_worker_by_lua* init_worker_by_lua init_worker_by_lua_block ?ngx.worker

    2024年02月07日
    瀏覽(20)
  • Windows 環(huán)境下nginx 靜態(tài)資源服務(wù)器(圖片,文件)權(quán)限控制(nginx/openresty/lua)

    Windows 環(huán)境下nginx 靜態(tài)資源服務(wù)器(圖片,文件)權(quán)限控制(nginx/openresty/lua)

    1 同nginx配置server以后,我們可以很方便的直接訪問(wèn)到文件服務(wù)器上的文件資源,但是某些情況下,文件資源可能是隱私圖片,比如客戶(hù)注冊(cè)時(shí)上傳的身份證照片等等,這時(shí)候我們需要對(duì)圖片訪問(wèn)進(jìn)行控制,必須登錄后才能查看到這些隱私圖片。 2 一般來(lái)說(shuō),我們都是通過(guò)后端

    2024年02月09日
    瀏覽(26)
  • 短鏈訪問(wèn)服務(wù)之openresty

    1.下載鏡像 docker pull openresty/openresty 2.運(yùn)行容器 docker run -it -d -p 8080:80 -v D:/openresty/conf/:/etc/nginx/conf.d/ --name openresty openresty/openrest D:/openresty/conf/default.conf 文件如下 # nginx.vh.default.conf ?-- ?docker-openresty # # This file is installed to: # ? `/etc/nginx/conf.d/default.conf` # # It tracks the `server`

    2024年02月12日
    瀏覽(15)
  • 在CentOS7環(huán)境中,實(shí)現(xiàn)使用openresty配置文件,達(dá)到j(luò)wt指定用戶(hù)userid不能訪問(wèn)的效果

    #在CentOS7環(huán)境中,實(shí)現(xiàn)使用openresty配置文件,達(dá)到j(luò)wt指定用戶(hù)userid不能訪問(wèn)的效果。 首先,你需要安裝 OpenResty 和 JWT 組件: 安裝 OpenResty 參考 OpenResty 的官方安裝文檔,在終端執(zhí)行如下命令: 安裝 LuaRocks 和 JWT 接下來(lái),你可以在 OpenResty 配置文件中實(shí)現(xiàn)需求: 在 nginx.conf 文件

    2024年02月09日
    瀏覽(18)
  • 在Openresty中使用lua語(yǔ)言向請(qǐng)求瀏覽器返回請(qǐng)求頭User-Agent里邊的值

    在Openresty中使用lua語(yǔ)言向請(qǐng)求瀏覽器返回請(qǐng)求頭User-Agent里邊的值

    可以參考《Linux學(xué)習(xí)之Ubuntu 20.04在https://openresty.org下載源碼安裝Openresty 1.19.3.1,使用systemd管理OpenResty服務(wù)》安裝Openresty。 然后把下邊的內(nèi)容寫(xiě)入到openresty配置文件 /usr/local/openresty/nginx/conf/nginx.conf (根據(jù)實(shí)際情況進(jìn)行選擇文件): 然后 sudo openresty 啟動(dòng)openresty。 最后在瀏覽器里

    2024年02月07日
    瀏覽(28)
  • 黑馬Redis視頻教程高級(jí)篇(安裝OpenResty)

    黑馬Redis視頻教程高級(jí)篇(安裝OpenResty)

    目錄 一、安裝 1.1、安裝開(kāi)發(fā)庫(kù) 1.2、安裝OpenResty倉(cāng)庫(kù) 1.3、安裝OpenResty 1.4、安裝opm工具 1.5、目錄結(jié)構(gòu) 1.6、配置nginx的環(huán)境變量 二、啟動(dòng)和運(yùn)行 三、備注 首先你的Linux虛擬機(jī)必須聯(lián)網(wǎng)。 首先要安裝OpenResty的依賴(lài)開(kāi)發(fā)庫(kù),執(zhí)行命令: 你可以在你的 CentOS 系統(tǒng)中添加 openresty 倉(cāng)庫(kù)

    2024年02月08日
    瀏覽(23)
  • SpringBoot限制接口訪問(wèn)頻率 - 這些錯(cuò)誤千萬(wàn)不能犯

    最近在基于SpringBoot做一個(gè)面向普通用戶(hù)的系統(tǒng),為了保證系統(tǒng)的穩(wěn)定性,防止被惡意攻擊,我想控制用戶(hù)訪問(wèn)每個(gè)接口的頻率。為了實(shí)現(xiàn)這個(gè)功能,可以設(shè)計(jì)一個(gè)annotation,然后借助AOP在調(diào)用方法之前檢查當(dāng)前ip的訪問(wèn)頻率,如果超過(guò)設(shè)定頻率,直接返回錯(cuò)誤信息。 在開(kāi)始介

    2024年02月05日
    瀏覽(17)
  • 使用Redis控制表單重復(fù)提交控制接口訪問(wèn)頻率

    防重提交有很多方案,從前端的按鈕置灰,到后端synchronize鎖、Lock鎖、借助Redis語(yǔ)法實(shí)現(xiàn)簡(jiǎn)單鎖、Redis+Lua分布式鎖、Redisson分布式鎖,再到DB的悲觀鎖、樂(lè)觀鎖、借助表唯一索引等等都可以實(shí)現(xiàn)防重提交,以保證數(shù)據(jù)的安全性。 這篇文章我們介紹其中一種方案– 借助Redis語(yǔ)法實(shí)

    2024年02月09日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包