一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - Nginx - 通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

2020-12-07 23:09今日頭條低調(diào)的干貨君 Nginx

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

 

前面提到過,nginx在項(xiàng)目中的作用。其實(shí)還有很多高級(jí)模塊功能,例如今天我們利用OpenResty來(lái)防止一些IP惡意攻擊。

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

官方地址:http://openresty.org/cn/

環(huán)境搭建

本文使用centos 7進(jìn)行操作,安裝nginx,本處安裝nginx并非是openresty前提,只是為了演示openresty安裝后,訪問地址會(huì)將nginx變成openresty

wget下載

wget http://nginx.org/download/nginx-1.19.5.tar.gz 

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

解壓并執(zhí)行安裝命令

tar -zxvf nginx-1.19.5.tar.gz #解壓 

cd nginx-1.19.5 #進(jìn)入目錄 

./configure #配置 

make #編譯 

make install #安裝 

cd /usr/local/nginx/sbin #切換到nginx命令目錄 

./nginx #啟動(dòng)nginx 

訪問地址

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

安裝openresty,先下載openresty,

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

(此版本最終一直無(wú)法加載一些lua腳本,最終使用openresty-1.15.8.3版本成功) 

(此版本最終一直無(wú)法加載一些lua腳本,最終使用openresty-1.15.8.3版本成功)

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

解壓&安裝

tar -zxvf openresty-1.19.3.1.tar.gz 

cd openresty-1.19.3.1 

yum install pcre-devel openssl-devel gcc curl  

./configure 

make 

make install 

執(zhí)行完后,我們啟動(dòng)openresty中得nginx,注意,切換到openresty安裝得路徑

/usr/local/openresty/nginx/sbin 

啟動(dòng)后,訪問,發(fā)現(xiàn)nginx變成了openresty

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

配置nginx.conf

測(cè)試lua功能

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP
通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

可以看到已經(jīng)可以使用lua腳本,下面我們將redis sdk引用進(jìn)來(lái)

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

配置請(qǐng)求路徑訪問lua腳本(本處只是做一個(gè)demo,如果對(duì)所有路徑進(jìn)行訪問限制,可以攔截/,然后lua驗(yàn)證通過后,進(jìn)行請(qǐng)求轉(zhuǎn)發(fā))

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

lua腳本

# Lua 

local function close_redis(redcli) 

    if not redcli then 

        return 

    end 

    --釋放連接(連接池實(shí)現(xiàn)) 

    local pool_max_idle_time = 10000 --毫秒 

    local pool_size = 100 --連接池大小 

    local ok, err = redcli: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 redcli = redis.new() 

redcli:set_timeout(1000) 

 

local ip = "127.0.0.1"  ---修改變量 

local port = "6379" ---修改變量 

local ok, err = redcli:connect(ip,port) 

if not ok then 

    return close_redis(redcli) 

end 

 

local clientIP = ngx.var.remote_addr 

 

-- increKey為請(qǐng)求頻率,blackKey黑名單key 

local incrKey = "user:"..clientIP..":request:frequency" 

local blackKey = "user:"..clientIP..":black:list" 

 

local is_black,err = redcli:get(blackKey) 

 

if tonumber(is_black) == 1 then 

    ngx.exit(403) 

    close_redis(redcli) 

end 

 

inc  = redcli:incr(incrKey) 

 

ngx.say(inc) 

 

if inc < 2 then 

   inc = redcli:expire(incrKey,1) 

end 

 

if inc > 2 then --每秒2次以上訪問即視為非法,會(huì)阻止30s的訪問 

    redcli:set(blackKey,1) 

    redcli:expire(blackKey,30) 

end 

 

close_redis(redcli) 

啟動(dòng)nginx后,請(qǐng)求一直報(bào)錯(cuò)

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

2020/12/01 19:13:53 [error] 2101#0: *2 lua entry thread aborted: runtime error: /usr/local/openresty/nginx/lua/access_by_redis.lua:29: attempt to call field 'get_headers' (a nil value) 

stack traceback: 

coroutine 0: 

        /usr/local/openresty/nginx/lua/access_by_redis.lua: in main chunk, client: 192.168.49.1, server: localhost, request: "GET /test1 HTTP/1.1", host: "192.168.49.131" 

這個(gè)問題困擾了我很久(凡是不要一上來(lái)就最新版本,吐血說(shuō)明)

windows版本的openresty并沒有出現(xiàn)此問題,liunux一直都有問題,最終降低了openresty版本,實(shí)驗(yàn)成功,openresty-1.15.8.3版本

正常請(qǐng)求

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

異常請(qǐng)求

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

最后openresty的運(yùn)行周期圖如下,可以從整體上了解openresty

通過OpenResty實(shí)現(xiàn)Nginx動(dòng)態(tài)拉黑IP

原文地址:https://www.toutiao.com/i6901200619571364356/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人影院免费在线观看 | 精品国产理论在线观看不卡 | 免费毛片大全 | 大学生宿舍飞机 free | 亚洲欧美日韩国产精品一区 | 欧美一区二区三区精品 | bl高h荡肉古代np| 午夜在线观看免费完整直播网页 | 91国内精品| 成人福利免费在线观看 | 亚洲 日韩 国产 制服 在线 | 免费在线观看伦理片 | 国内小情侣一二三区在线视频 | 四虎永久免费地址在线观看 | 国产九九视频在线观看 | 国产成人久久精品推最新 | 精精国产xxxx视频在线播放器 | gay男强壮军人chinese | 日本老妇乱子伦中文视频 | 丰满艳妇亲伦视频 | 羞羞答答免费人成黄页在线观看国产 | 国产高清亚洲 | 日本中文字幕在线精品 | 精品suv一区二区三区 | 国产精品中文 | 人人福利| 亚洲精品在线免费观看视频 | 国产精品视频免费视频 | chinese456老人gay china外卖员gay国产xnxx | 亚洲精品国产在线 | 国产在线观看网站 | 福利姬 magnet | 毛片影院 | 亚洲免费一 | 亚洲无线一二三四区 | 国产精品第一区揄拍 | 欧美5g影院| 99精品久久精品一区二区 | 高考录取率1977-2021 | 三级全黄裸体 | 热九九精品 |