百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

通过OpenResty实现nginx动态拉黑IP

liuian 2024-12-25 14:01 70 浏览

前面提到过,nginx在项目中的作用。其实还有很多高级模块功能,例如今天我们利用OpenResty来防止一些IP恶意攻击。

OpenResty? 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

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

环境搭建

本文使用centos 7进行操作,安装nginx,本处安装nginx并非是openresty前提,只是为了演示openresty安装后,访问地址会将nginx变成openresty

wget下载

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

解压并执行安装命令

tar -zxvf nginx-1.19.5.tar.gz #解压
cd nginx-1.19.5 #进入目录
./configure #配置
make #编译
make install #安装
cd /usr/local/nginx/sbin #切换到nginx命令目录
./nginx #启动nginx

访问地址

安装openresty,先下载openresty,

wget https://openresty.org/download/openresty-1.19.3.1.tar.gz
(此版本最终一直无法加载一些lua脚本,最终使用openresty-1.15.8.3版本成功)

解压&安装

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

执行完后,我们启动openresty中得nginx,注意,切换到openresty安装得路径

/usr/local/openresty/nginx/sbin

启动后,访问,发现nginx变成了openresty

配置nginx.conf

测试lua功能


可以看到已经可以使用lua脚本,下面我们将redis sdk引用进来

配置请求路径访问lua脚本(本处只是做一个demo,如果对所有路径进行访问限制,可以拦截/,然后lua验证通过后,进行请求转发)

lua脚本

# Lua
local function close_redis(redcli)
    if not redcli then
        return
    end
    --释放连接(连接池实现)
    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为请求频率,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次以上访问即视为非法,会阻止30s的访问
    redcli:set(blackKey,1)
    redcli:expire(blackKey,30)
end

close_redis(redcli)

启动nginx后,请求一直报错

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"

这个问题困扰了我很久(凡是不要一上来就最新版本,吐血说明)

windows版本的openresty并没有出现此问题,liunux一直都有问题,最终降低了openresty版本,实验成功,openresty-1.15.8.3版本

正常请求

异常请求


最后openresty的运行周期图如下,可以从整体上了解openresty

相关推荐

2020显卡天梯图10月(2020显卡天梯图极速空间)

排行球队名称积分已赛胜平负进球失球净胜球  1?诺维奇城974629107753639 2?沃特福德91462710...

路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
笔记本电脑无线网络连接(笔记本电脑无线网络连接不上怎么办)
笔记本电脑无线网络连接(笔记本电脑无线网络连接不上怎么办)

一、笔记本电脑怎么连接wifi---win7系统笔记本连接wifi1、要先创建无线网络连接,将鼠标移到Win7的开始菜单,然后点击“控制面板”。2、然后点击“网络和Internet”。3、再打开“网络和共享中心”,这是Win7系统必有的功...

2025-12-22 05:55 liuian

wind数据库(wind数据库官网)

先购买wind数据库,安装好wind取得使用权后,按照wind所给提示,输入账户和密码可使用wind数据库。Wind资讯金融终端是一个集实时行情、资料查询、数据浏览、研究分析、新闻资讯为一体的金融数据...

如何关闭360家庭防火墙(如果关闭360家庭防火墙)

关闭方法如下:1.打开手机360主界面之后,点击“安全防护中心”。2.点击第三列“入口防护”下方的“查看状态”按钮。3.在列出的功能项中找到“局域网防护”,直接点击后面的“关闭”按钮,关闭所有的“局域...

笔记本电脑型号配置怎么看(怎么查自己电脑的型号)

查电脑的配置和型号方法:方法一:1、右键单击“此电脑”,点击属性2、这里可以看到操作系统,CPU等大致信息3、点击设备管理器4、这里可以查看具体硬件的详细信方法二:1、首先打开电脑上的“控制面板”2、...

pscs6序列号是什么

AdobePhotoshopCS6就二个版本(测试版和正式版)1、AdobePhotoshopCS6是AdobePhotoshop的第13代,是一个较为重大的版本更新。2、Photoshop在前几...

win7桌面图片怎么设置(win7如何设置桌面图片)

1、首先用鼠标右键单击桌面的空白处。然后在弹出的菜单上选择“个性化”选项。这样就弹出了的个性化窗口上能显示看到“桌面背景”按钮。点击它即可。2、继续打开了选择“桌面背景”选项,然后在上面选择你想要设置...

windows安卓下载(win安卓版)

2265安卓网是安全的,2265安卓网成立于2012年初,网站一直努力为各位安卓爱好者提供最新、最全的安卓游戏软件资源下载。经过几个月的努力、和广大安卓用户的支持、2265安卓网截至到2012年6月已...

电脑ppt怎么制作(电脑ppt怎么制作软件)
  • 电脑ppt怎么制作(电脑ppt怎么制作软件)
  • 电脑ppt怎么制作(电脑ppt怎么制作软件)
  • 电脑ppt怎么制作(电脑ppt怎么制作软件)
  • 电脑ppt怎么制作(电脑ppt怎么制作软件)
电脑系统网站排行榜(电脑系统网址还有哪些)

车架号查询网站:http://www.yiparts.com/vin通过车架号查询车辆信息。新国标电动车一般是15位纯数字的车架号,如175721508069087,1757前四位是企业代码,由企业申...

清理磁盘碎片怎么清理(清理磁盘碎片怎么清理不了)

清除磁盘碎片的方法是通过使用磁盘清理工具来进行操作。首先,明确结论是清除磁盘碎片可以提高电脑的性能和运行速度。其次,原因是磁盘碎片是指文件在硬盘上存储时被分割成多个碎片,导致读取速度变慢。清除磁盘碎片...

怎么安装qq软件(怎样安装qq)
  • 怎么安装qq软件(怎样安装qq)
  • 怎么安装qq软件(怎样安装qq)
  • 怎么安装qq软件(怎样安装qq)
  • 怎么安装qq软件(怎样安装qq)
kms激活win7提示不是vl版(不是vol版无法使用kms激活)

1.可以通过KMS激活或者使用激活工具进行激活。2.因为VL版的Windows需要通过企业或者教育机构购买,所以需要使用KMS激活或者激活工具进行激活。3.如果想要更加稳定和安全的激活方式,可以...

如何自动释放虚拟内存(自动设置虚拟内存)

虚拟内存是计算机系统中的一种机制,它可以将部分硬盘空间作为内存使用,以弥补物理内存不足的情况。虚拟内存中的数据会在物理内存不足时被交换到硬盘上,而当需要访问这些数据时,它们会被再次加载到物理内存中。虚...