Nginx(编译)+Lua脚本+Redis 实现自动封禁访问频率过高IP

1.安装lua
1.1安装LuaJIT

yum install readline-devel
mkdir -p lua-file
cd lua-file/
wget https://github.com/LuaJIT/LuaJIT/archive/refs/tags/v2.0.5.tar.gz
tar -zxvf LuaJIT-2.0.5.tar.gz 
cd LuaJIT-2.0.5
make && make install PREFIX=/usr/local/luajit


1.2配置LuaJIT环境变量

[root@localhost lua-file]# vim /etc/profile

#/etc/profile 文件中加入环境变量

export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

[root@localhost lua-file]# source /etc/profile

1.3 lua安装测试

[root@localhost lua-file]# vim hello.lua
print('hello world lua');

[root@localhost lua-file]# lua hello.lua 
hello world lua

2.ngx_devel_kit和lua-nginx-module
ngx_devel_kit简称NDK,提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。
lua-nginx-module是nginx的lua模块

[root@localhost ~]# mkdir -p /usr/local/src/nginx
[root@localhost ~]# cd /usr/local/src/nginx/
[root@localhost nginx]# wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
[root@localhost nginx]# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
[root@localhost nginx]# ls
v0.10.9rc7.tar.gz  v0.3.0.tar.gz
[root@localhost nginx]# tar -zxvf v0.10.9rc7.tar.gz 
[root@localhost nginx]# tar -zxvf v0.3.0.tar.gz 


3.查看已安装好的nginx
3.1查看原安装

[root@localhost nginx]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_gzip_static_module

3.2 安装依赖

[root@localhost nginx]# yum -y install openssl openssl-devel zlib zlib-devel pcre-devel

3.3 进入nginx解压目录,安装扩展

[root@localhost ~]# cd nginx-1.14.2
[root@localhost nginx-1.14.2]# 

3.3.1.清空之前的编译文件

[root@localhost nginx-1.14.2]# make clean

3.3.2 执行 nginx -V 查看之前的编译参数

[root@localhost nginx-1.14.2]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_gzip_static_module

3.3.3 添加扩展执行编译

[root@localhost nginx-1.14.2]# ls /usr/local/src/nginx/
lua-nginx-module-0.10.9rc7  ngx_devel_kit-0.3.0  v0.10.9rc7.tar.gz  v0.3.0.tar.gz
[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_gzip_static_module --add-module=/usr/local/src/nginx/lua-nginx-module-0.10.9rc7/ --add-module=/usr/local/src/nginx/ngx_devel_kit-0.3.0/


3.3.4.执行make (不能执行 make install)

[root@localhost nginx-1.14.2]# make
(打开新连接窗口操作)重命名 nginx 旧版本二进制文件,即 sbin 目录下的 nginx(期间 nginx 并不会停止服务)
[root@localhost nginx-1.14.2]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ls
nginx
[root@localhost sbin]# mv nginx nginx.old
[root@localhost sbin]# ls
nginx.old

拷贝一份新编译的二进制文件到安装目录

[root@localhost nginx-1.14.2]# pwd
/root/nginx-1.14.2
[root@localhost nginx-1.14.2]# cd objs/
[root@localhost objs]# cp nginx /usr/local/nginx/sbin/
[root@localhost objs]# ls /usr/local/nginx/sbin/
nginx  nginx.old
 

在源码目录执行 make upgrade 开始升级

[root@localhost nginx-1.14.2]# make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

如果有这个报错:nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory#解决方案
[root@localhost nginx-1.14.2]# vim /etc/ld.so.conf

#新增一条/usr/local/luajit/lib#保存文件,执行ldconfig

[root@localhost nginx-1.14.2]# ldconfig  

###查看是否安装成功
[root@localhost nginx-1.14.2]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_gzip_static_module --add-module=/usr/local/src/nginx/lua-nginx-module-0.10.9rc7/ --add-module=/usr/local/src/nginx/ngx_devel_kit-0.3.0/

4 nginx引入lua调试
4.1 nginx.conf引入lua

[root@localhost conf]# pwd
/usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf

set $test "hello world lua";location /lua_test {content_by_lua 'ngx.header.content_type="text/plain";ngx.say(ngx.var.test);';}

       


4.2 重启nginx,执行访问
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s reload
执行访问

5.实现lua连接redis
redis集群扩展包:https://github.com/onlonely/lua-redis-cluster
对于lua来说,它是一个非常轻量级的脚本语言,而它本身也与php的composer是一样的,是可以添加扩展,只是他们的扩展我们需要自己找对应的模块库
官方组件:https://openresty.org/cn/components.html

[root@localhost 5.1]# pwd

/usr/local/luajit/share/lua/5.1
5.2 下载快速JSON编码/解析

[root@localhost 5.1]# git clone https://github.com/openresty/lua-cjson.git

5.3 下载 lua-resty-redis (单机版redis)客户端

[root@localhost 5.1]# wget https://codeload.github.com/agentzh/lua-resty-redis/tar.gz/v0.26

tar -zxvf v0.26

cd lua-resty-redis-0.26/lib/resty/

cp redis.lua /usr/local/nginx/conf/lua/

5.4 lua连接单机版本redis

资料地址:https://github.com/openresty/lua-resty-redis

5.4.1编辑nginx.conf脚本
    #引入lua-reds 扩展库(此处可以在lua脚本里面引入,公共的也可以在此引入)
     #连接单机版本的redis

lua_package_path "/usr/local/nginx/conf/lua/redis.lua;;";location /lua_redis {default_type 'application/x-javascript;charset=utf-8';content_by_lua_file /usr/local/nginx/conf/lua/lua_redis.lua;}


 


5.4.2 编辑连接redis的lua脚本

[root@localhost conf]# vim lua/lua_redis.lua 

local redis = require "resty.redis"
local red = redis:new()red:set_timeouts(1000, 1000, 1000) -- 1 sec--lua 连接redis
local ok,err = red:connect("127.0.0.1", 6379)if not ok thenngx.say("failed to connect: ", err)return
end--设置数据
local date=os.date("%Y-%m-%d %H:%M:%S")
ok,err = red:set("dog", date.."-数据")
if not ok thenngx.say("failed to set dog: ", err)return
end--获取设置的值
local res,err=red:get("dog")
if not res thenngx.say("failed to get dog",err)return
endngx.say(res)


5.4.3 重启nginx,访问nginx,数据成功写入redis,并读取

[root@localhost lua]# /usr/local/nginx/sbin/nginx -s reload

#(重启报错,自行查看nginx 的 error.log文件,具体根据自行的错误日志输错文件目录查看)
[root@localhost lua]# ls /usr/local/nginx/logs/
access.log  error.log

准备工作已经完成,现在要实现nginx+Lua+Redis自动封禁并解封IP了,参考前面文章,这里不重复了

Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP-CSDN博客

知识点:

如果之前是yum安装的NGINX怎么整?

1:nginx -V;查看之前yum安装的自带编译参数和版本

2:下载同版本的源码包,进行编译

3:只需要make,不要make install,然后mv objs/nginx /usr/sbin/nginx,这样yum安装的nginx就编译完成lua的模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468713.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…

Java - SpringBoot之logback设置日期分割并设置指定时间自动清除,Linux启动运行

一、SpringBoot之logback-spring.xml配置 在Spring Boot中,要设置日志按照日期进行分割输出,并设置日志文件的大小自动清除,可以使用logback日志框架的配置 1、创建文件 在项目的resources目录下,创建logback-spring.xml文件 …

window11安装elasticsearch+Kibana

1、下载elasticsearch与elasticsearch 下载elasticsearch 查看elasticsearch对应的Kibana版本 下载elasticsearch解压后文件目录如下 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等 bin配置文件目录,如elasticsearch配置、角色配置、jvm配置等 conf 默认…

【HCIP园区网综合拓扑实验】配置步骤与详解(已施工完毕)

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求,完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan(本实验未使用) 4、上层…

【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,UKF滤波

基于【PSINS工具箱】,提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式为UKF) 文章目录 工具箱程序简述运行结果 代码程序讲解MATLAB 代码教程:使用UKF进行速度观测1. 引言与基本设置2. 初始设置3. U…

java访问华为网管软件iMaster NCE的北向接口时传递参数问题

上一篇文章介绍了利用《java访问华为网管软件iMaster NCE的北向接口》的一般性步骤,这里详细介绍其中一个读取性能数据的示例。原因是读取华为网管软件北向接口,完全找不到可供参考的例子。如果不需要传递什么参数,就能获取到结果&#xff0c…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

【2024软考架构案例题】你知道什么是 RESTful 风格吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

科大讯飞面经,蛮简单的

先来看面经: 下面我来简单聊聊这些问题。 自我介绍 关于如何自我介绍,这个如果还不会或者还没有准备,请先准备好你要如何向面试官介绍自己。 面试本来就是一个自我推销的方式之一,如果自我介绍都不会说,你如何卖个好价…

首次超越扩散模型和非自回归Transformer模型!字节开源RAR:自回归生成最新SOTA!

文章链接:https://arxiv.org/pdf/2411.00776 项目链接:https://yucornetto.github.io/projects/rar.html 代码&模型链接:https://github.com/bytedance/1d-tokenizer 亮点直击 RAR(随机排列自回归训练策略)&#x…

通义千问API调用测试 (colab-python,vue)

文章目录 代码(来自官网)colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面,点击API示例 前端调用直接在前端调用的优缺点以vue为例(代码是基于官网node.js的代码转换而来&#xf…

立体工业相机提升工业自动化中的立体深度感知

深度感知对仓库机器人应用至关重要,尤其是在自主导航、物品拾取与放置、库存管理等方面。 通过将深度感知与各种类型的3D数据(如体积数据、点云、纹理等)相结合,仓库机器人可以在错综复杂环境中实现自主导航,物品检测…

LSTM+LightGBM+Catboost的stacking融合模型

基本介绍 针对目前大部分数据同时具有特征连续和特征不连续的特点,将神经网络模型如LSTM和回归树模型如XGboost,基于stacking集成学习原理进行融合 附有模型评价指标R2、RMSE、MAE、MSE,代码包含注释,可以直接运行。 融合过程 在机器学习中…

人工智能 | 文生视频大模型

简介 文生视频指的是将文本描述转化为视频内容的技术,2024年2月15日 OpenAI 正式对外发布 Sora 人工智能模型,在人工智能领域掀起了一场风波,这是计算机视觉领域的一个突破。 Sora 这一名称起源于日文中“空”的含义,暗示了其具…

测试实项中的偶必现难测bug--一键登录失败

问题描述:安卓和ios有出现部分一键登录失败的场景,由于场景比较极端,衍生了很多不好评估的情况。 产生原因分析: 目前有解决过多次这种行为的问题,每次的产生原因都有所不同,这边根据我个人测试和收集复现的情况列举一些我碰到的: 1、由于我们调用的是友盟的一键登录的…

Pr:视频过渡快速参考(合集 · 2025版)

Adobe Premiere Pro 自带七组约四十多个视频过渡 Video Transitions效果,包含不同风格和用途,可在两个剪辑之间创造平滑、自然的转场,用来丰富时间、地点或情绪的变化。恰当地应用过渡可让观众更好地理解故事或人物。 提示: 点击下…

Jest项目实战(7):部署文档网站到 GitHub Pages

关于部署网站,理论上来讲,只要你有一个服务器,你要采用什么样的方式来部署都是可以的。但是前提是你需要有一个服务器(物理机、云服务器)。 这一小节我们部署文档网站选择使用 github 来进行部署,因为 Git…

第十九周:机器学习

目录 摘要 Abstract 一、吴恩达机器学习Exp1——线性回归 1、单变量线性回归 1.1数据集的读取及可视化 1.2分割训练集和验证集 1.3扩展维度 1.4线性回归模型 1.5训练过程可视化 2、多变量线性回归 2.1加载数据集并可视化 2.2划分训练集和验证集 2.3线性回归模型 …

Mac保护电池健康,延长电池使用寿命的好方法

使用Mac的过程中,如何延长电池的使用寿命是大家非常关心的问题,而养成一个良好的充电习惯能够有效的延长电池的使用寿命 避免过度充电和过度放电能够有效的保护电池,因此长时间的充电与长时间放点都不可取,但是在日常的使用过程中…

Python 爬虫数据清洗与存储:基础教程

Python 爬虫数据清洗与存储:基础教程 在爬虫数据获取完成后,数据往往是“原始”的,不适合直接使用。清洗和存储是将爬取到的原始数据转化为有用信息的关键步骤。本文将系统地介绍 Python 中进行数据清洗与存储的基本方法,帮助新手…