mac m1 安装openresty以及redis限流使用

一切源于一篇微信文章

  • 早上我上着班,听着歌
    • 1.打算使用腾讯云服务器centos-7实验:
    • 安装ngx_devel_kit
    • mac m1 os 12.7.6 安装openresty
    • 测试lua限流: 终于回到初心了!

早上我上着班,听着歌

突然微信推送了一篇文章《Nginx 实现动态封禁IP,详细教程来了》nginx动态封禁ip,然后手抽点进去看了看,然后。。。就打算实践验证一下。。没想到啊,遇到各种问题。。所以记录下。。。

1.打算使用腾讯云服务器centos-7实验:

安装lua-nginx-module
需要先安装LuaJIT,并依赖ngx_devel_kit。
安装LuaJIT

  • LuaJIT — a Just-In-Time Compiler for Lua.
    https://luajit.org/download.html
    下面几个链接我都点进去看了看。。。

https://repo.or.cz/w/luajit-2.0.git
https://github.com/LuaJIT/LuaJIT/tags
https://luajit.org/status.html
在这里插入图片描述

所以决定下载2.0版本。
本机下载好后,上传服务器:

jelex@jelexxudeMacBook-Pro Downloads % scp LuaJIT-2.0.ROLLING.tar.gz root@我的tencent服务器ip:/opt

解压后:
在这里插入图片描述
安装:

[root@VM-24-5-centos LuaJIT-2.0.ROLLING]# make install PREFIX=/usr/local/LuaJIT 

在这里插入图片描述
查看:
在这里插入图片描述
/etc/profile 文件末尾加入环境变量:

export LUAJIT_LIB=/usr/local/LuaJIT/lib
export LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.0[root@VM-24-5-centos LuaJIT]# source /etc/profile

安装ngx_devel_kit

项目地址:https://github.com/simplresty/ngx_devel_kit
下载并解压,不需要安装:
https://github.com/vision5/ngx_devel_kit/releases/tag/v0.3.3
在这里插入图片描述
上传解压:
在这里插入图片描述
安装lua-nginx-module
项目地址:https://github.com/openresty/lua-nginx-module

下载并解压,不需要安装:
https://github.com/openresty/lua-nginx-module/tags
在这里插入图片描述
编译Nginx
需要安装pcre依赖库(这个服务器可能安装过。。。不管怎样,执行下)

$ yum install readline-devel pcre-devel openssl-devel 

$ yum install readline-devel pcre-devel openssl-devel
所以还需要去下载lua-nginx-module: https://github.com/openresty/lua-nginx-module

查看当前的配置:[root@VM-24-5-centos opt]# /usr/local/nginx/sbin/nginx -V
呃,对,我刚搞音视频,所以有dav, rtmp…
在这里插入图片描述

--prefix=/usr/local/nginx --with-http_ssl_module --with-http_dav_module --add-module=../nginx-rtmp-module-1.2.2 --add-module=../nginx-dav-ext-module-master --add-module=../headers-more-nginx-module-0.37

追加参数:

--with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-pcre --with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib --add-module=/opt/ngx_devel_kit-0.3.3 --add-module=/opt/lua-nginx-module-0.10.27

得到完整命令:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_dav_module --add-module=../nginx-rtmp-module-1.2.2 --add-module=../nginx-dav-ext-module-master --add-module=../headers-more-nginx-module-0.37 --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-pcre --with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib --add-module=/opt/ngx_devel_kit-0.3.3 --add-module=/opt/lua-nginx-module-0.10.27

执行:

[root@VM-24-5-centos opt]# cd nginx-1.26.0/
[root@VM-24-5-centos nginx-1.26.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_dav_module --add-module=../nginx-rtmp-module-1.2.2 --add-module=../nginx-dav-ext-module-master --add-module=../headers-more-nginx-module-0.37 --with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib --add-module=/opt/ngx_devel_kit-0.3.3 --add-module=/opt/lua-nginx-module-0.10.27

在这里插入图片描述

[root@VM-24-5-centos nginx-1.26.0]# make -j2

报错:/opt/lua-nginx-module-0.10.27/src/ngx_http_lua_ssl_certby.c: In function ‘ngx_http_lua_ffi_ssl_client_random’:
/opt/lua-nginx-module-0.10.27/src/ngx_http_lua_ssl_certby.c:1651:5: error: implicit declaration of function ‘SSL_get_client_random’ [-Werror=implicit-function-declaration]

在这里插入图片描述
然后到这步了,提示我:
It is highly recommended to use OpenResty releases which bundle Nginx, ngx_lua (this module), LuaJIT, as well as other powerful companion Nginx modules and Lua libraries.
It is discouraged to build this module with Nginx yourself since it is tricky to set up exactly right.

https://github.com/openresty/lua-nginx-module

在这里插入图片描述
我的nginx正好是1.26版本,不兼容??!!??白忙了。。。

所以linux到此为止。。。下面研究本机mac安装openresty:

mac m1 os 12.7.6 安装openresty

https://openresty.org/cn/download.html
在这里插入图片描述
在这里插入图片描述
先更新brew:

brew update
brew install pcre openssl

安装:
jelex@jelexxudeMacBook-Pro ~ % brew install openresty/brew/openresty
在这里插入图片描述
解决:https://site.ip138.com/raw.githubusercontent.com/
在这里插入图片描述
加入:

jelex@bogon ~ % cat /etc/hosts
185.199.111.133 raw.githubusercontent.com

在这里插入图片描述
重新执行:jelex@jelexxudeMacBook-Pro ~ % brew install openresty/brew/openresty

。。。 。。。
在这里插入图片描述在这里插入图片描述

what the f**, 你们看看,大佬们,你们看看,它们多嚣张,我试着翻译第一段:
我们(和苹果公司)不会提供macOS 12这个老版本的支持。
一些formulae在这个老版本上构建失效是意料之中的结果。
在这个版本上Homebrew注定会有问题并且很慢.
关于这些问题,不要在Homebrew上的github上提任何issue。
即使你认为这些消息提示没有关联,也不要提任何issue.
全体打开的issue会被立刻关闭(不会有回答)
不要在社交媒体向Homebrew或它的维护者请求帮助。
你可以从Homebrew的讨论中请求帮助,但是不太可能会有人回复你。
尝试自己解决这问题,提交一个fix…
我们会预览,但是可能会/也可能不会 接受你的pull request…

另外,我的xcode是13.2版本,也过期了。。。

command line 工具也。。。

然后我又去下载新的xcode 14.0 : 兼容12.5.。。7个G大小。。。

稀里糊涂下载了后,又没来及用,。。。

因为我打算使用源码安装试试:

下载一个老的版本:看着1.19.9.1 比较顺眼:

jelex@bogon openresty-1.19.9.1 % pwd
/Users/jelex/Documents/work/openresty-1.19.9.1jelex@bogon openresty-1.19.9.1 % ./configure --with-cc-opt="-I/usr/local/openssl/include/ -I/usr/local/include/pcre/include/" --with-ld-opt="-L/usr/local/openssl/lib/ -L/usr/local/include/pcre/lib/" -j8

在这里插入图片描述
下载openssl:https://openssl-library.org/source/
在这里插入图片描述

jelex@bogon openssl-3.3.2 % pwd
/Users/jelex/Documents/work/openssl-3.3.2
jelex@bogon openssl-3.3.2 % sudo ./config --prefix=/usr/local/openssl

在这里插入图片描述

sudo make
sudo make installjelex@bogon openssl-3.3.2 % openssl versionOpenSSL 3.3.2 3 Sep 2024 (Library: OpenSSL 3.3.2 3 Sep 2024)
jelex@bogon openssl-3.3.2 %

在这里插入图片描述
在这里插入图片描述

再次:

jelex@bogon openresty-1.19.9.1 % pwd
/Users/jelex/Documents/work/openresty-1.19.9.1./configure --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-cc-opt="-I/usr/local/openssl/include/ -I/usr/local/include/pcre/include/" --with-luajit --without-http_redis2_module --with-ld-opt="-L/usr/local/openssl/lib/ -L/usr/local/include/pcre/lib/" --with-openssl=/Users/jelex/Documents/work/openssl-3.3.2 --with-pcre  -j8

在这里插入图片描述
运行结果:
在这里插入图片描述
sudo make
sudo make install

在这里插入图片描述

jelex@bogon bin % pwd
/usr/local/openresty/binjelex@bogon bin % ./openresty -V

在这里插入图片描述

jelex@bogon nginx % pwd
/usr/local/openresty/nginxjelex@bogon nginx % cat conf/nginx.conf

在这里插入图片描述

	location /hello {default_type 'text/plain';return 200 'hello echo!';}location /hello_lua {default_type 'text/plain';content_by_lua 'ngx.say("hello, lua!")';}

启动 & 测试:

jelex@bogon nginx % curl http://127.0.0.1/hello
hello echo!%
jelex@bogon nginx % curl http://127.0.0.1/hello_lua
hello, lua!
jelex@bogon nginx %

在这里插入图片描述

测试lua限流: 终于回到初心了!

在这里插入图片描述
在这里插入图片描述
重启nginx:

jelex@bogon nginx % pwd
/usr/local/openresty/nginxjelex@bogon nginx % sudo ./sbin/nginx -s stop
jelex@bogon nginx % sudo ./sbin/nginxjelex@bogon nginx % tail -200f logs/error.log

在这里插入图片描述

修改access_limit.lua权限:还是不行,那就移动位置
在这里插入图片描述
再修改nginx.conf配置:

access_by_lua_file access_limit.lua;

在这里插入图片描述

重启nginx:
jelex@bogon nginx % sudo ./sbin/nginx -s stop
jelex@bogon nginx % sudo ./sbin/nginx

对这个路径无效:
在这里插入图片描述

但是对下面这个有用:
在这里插入图片描述
连续快速多点几次:
在这里插入图片描述
在这里插入图片描述
最后借花献佛,附上大佬的lua脚本:

--连接池超时回收毫秒
local pool_max_idle_time = 10000
--连接池大小
local pool_size = 100
--redis 连接超时时间
local redis_connection_timeout = 100
--redis host
local redis_host = "101.43.xx.xxx"
--redis port
local redis_port = "6379"
--redis auth
local redis_auth = "差点用了真密码~";
--封禁IP时间(秒)
local ip_block_time= 120
--指定ip访问频率时间段(秒)
local ip_time_out = 1
--指定ip访问频率计数最大值(次)
local ip_max_count = 3--  错误日志记录
local function errlog(msg, ex)ngx.log(ngx.ERR, msg, ex)
end-- 释放连接池
local function close_redis(red)if not red thenreturnendlocal ok, err = red:set_keepalive(pool_max_idle_time, pool_size)if not ok thenngx.say("redis connct err:",err)return red:close()end
end--连接redis
local redis = require "resty.redis"
local client = redis:new()
local ok, err = client:connect(redis_host, redis_port)
-- 连接失败返回服务器错误
if not ok thenclose_redis(client)ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
--设置超时时间
client:set_timeout(redis_connection_timeout)-- 优化验证密码操作 代表连接在连接池使用的次数,如果为0代表未使用,不为0代表复用 在只有为0时才进行密码校验
local connCount, err = client:get_reused_times()
-- 新建连接,需要认证密码
if  0 == connCount thenlocal ok, err = client:auth(redis_auth)if not ok thenerrlog("failed to auth: ", err)returnend--从连接池中获取连接,无需再次认证密码
elseif err thenerrlog("failed to get reused times: ", err)return
end-- 获取请求ip
local function getIp()local clientIP = ngx.req.get_headers()["X-Real-IP"]if clientIP == nil thenclientIP = ngx.req.get_headers()["x_forwarded_for"]endif clientIP == nil thenclientIP = ngx.var.remote_addrendreturn clientIP
endlocal cliendIp = getIp();local incrKey = "lim:cnt:"..cliendIp
local blockKey = "lim:blk:"..cliendIp--查询ip是否被禁止访问,如果存在则返回403错误代码
local is_block,err = client:get(blockKey)
if tonumber(is_block) == 1 thenngx.exit(ngx.HTTP_FORBIDDEN)close_redis(client)
endlocal ip_count, err = client:incr(incrKey)
if tonumber(ip_count) == 1 thenclient:expire(incrKey,ip_time_out)
end
--如果超过单位时间限制的访问次数,则添加限制访问标识,限制时间为ip_block_time
if tonumber(ip_count) > tonumber(ip_max_count) thenclient:set(blockKey,1)client:expire(blockKey,ip_block_time)
endclose_redis(client)

下面是引用链接:
[1]: https://www.cnblogs.com/52fhy/p/10164553.html
[2]: https://mp.weixin.qq.com/s/klh3Ho-UJ-p1LJWCLMHckg
[3]: https://site.ip138.com/raw.githubusercontent.com/
[4]: http://adrai.github.io/flowchart.js/

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

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

相关文章

记录一次从nacos配置信息泄露到redis写计划任务接管主机

经典c段打点开局。使用dddd做快速的打点发现某系统存在nacos权限绕过 有点怀疑是蜜罐,毕竟nacos这实在是有点经典 nacos利用 老规矩见面先上nacos利用工具打一波看看什么情况 弱口令nacos以及未授权访问,看这记录估计被光顾挺多次了啊 手动利用Nacos-…

MySQL - Navicat自动备份MySQL数据

对于从事IT开发的工程师,数据备份我想大家并不陌生,这件工程太重要了!对于比较重要的数据,我们希望能定期备份,每天备份1次或多次,或者是每周备份1次或多次。 如果大家在平时使用Navicat操作数据库&#x…

深入解析Python数据容器

Python数据容器 1,数据容器介绍2,数据容器的分类3,数据容器:list(列表)3.1,列表的定义3.2,列表的下标索引3.3,列表的常用操作3.3.1,查找指定元素下标3.3.2&am…

【OpenAI】第三节(上下文)什么是上下文?全面解读GPT中的上下文概念与实际案例

文章目录 一、GPT上下文的定义1.1 上下文的组成 二、GPT上下文的重要性2.1 提高生成文本的相关性2.2 增强对话的连贯性2.3 支持多轮对话 三、使用上下文改善编程对话3.1 使用上下文的概念3.2 使用上下文改善对话的作用3.3 使用上下文改善对话的方法3.4 案例分析 四、利用历史记…

安装Openeuler出现的问题

1.正常安装中,不显示已有的网络,ens33 尝试:手敲ens33配置,包括使用uuidgen ens33 配置还是不行 可能解决办法1:更换安装的版本。譬如说安装cenos 7 64位 启动虚拟机,更换版本之后的安装界面,…

Excel常用操作培训

以下是Excel的基本操作,内部培训专用。喜欢就点赞收藏哦! 目录 1 Excel基本操作 1.1 常用快捷键 1.1.1快捷键操作工作簿、工作表 1.1.2快捷键操作 1.1.3单元格操作 1.1.4输入操作 2.1 常见功能描述 2.1.1 窗口功能栏 2.1.2 剪切板 2.1.3 字体…

计算机网络——传输层服务

传输层会给段加上目标ip和目标端口号 应用层去识别报文的开始和结束

海南聚广众达电子商务咨询有限公司靠谱吗怎么样?

在当今这个数字化浪潮席卷全球的时代,抖音电商以其独特的魅力成为了众多商家争相入驻的新蓝海。而在这片浩瀚的电商海洋中,如何找到一家既专业又可靠的合作伙伴,成为了众多商家心中的一大难题。今天,我们就来深入剖析一下海南聚广…

组件可控个性化生成新方法MagicTailor:生成过程中可以自由地定制ID

今天的文章来自公众号粉丝投稿,文章提出了一种组件可控的个性化生成方法MagicTailor,旨在个性化生成过程中可以自由地定制ID的特定组件。 相关链接 论文阅读:https://arxiv.org/pdf/2410.13370 项目主页:https://correr-zhou.gi…

拼多多详情API接口的获取与应用

一、拼多多详情API接口概述 1. API接口定义与功能 拼多多开放平台为开发者提供了丰富的API接口,其中商品详情API接口尤为重要。该接口允许开发者通过编程方式获取商品的详细信息,包括商品标题、价格、描述、图片、规格参数、库存等。这些信息对于电商数…

无人机之自主飞行关键技术篇

无人机自主飞行指的是无人机利用先进的算法和传感器,实现自我导航、路径规划、环境感知和自动避障等能力。这种飞行模式大大提升了无人机的智能化水平和操作的自动化程度。 一、传感器技术 传感器是无人机实现自主飞行和数据采集的关键组件,主要包括&a…

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质(Material)、…

No.18 笔记 | XXE(XML 外部实体注入)漏洞原理、分类、利用及防御整理

一、XXE 漏洞概述 (一)定义 XXE(XML 外部实体注入)漏洞源于 XML 解析器对外部实体的不当处理,攻击者借此注入恶意 XML 实体,可实现敏感文件读取、远程命令执行和内网渗透等危险操作。 (二&am…

一、Python基础语法(有C语言基础速成版)

在python中,变量是没有类型的,变量存储的数据是有类型的 可以把变量当做一个存放物品的盒子 一、字面量 字面量:在代码中,被写下来的 固定的值 python中常见的值的类型 二、注释 # 我是单行注释,一般要加个空格&a…

java设计模式——装饰者模式

定义: 装饰者模式是一种结构型设计模式,它允许动态地给对象添加新的功能,而不会改变其原有的结构。与继承不同,装饰者模式通过组合而不是继承来扩展对象的功能,这样可以有效地避免类爆炸问题(多个子类的冗余…

动手学深度学习9.7. 序列到序列学习(seq2seq)-笔记练习(PyTorch)

本节课程地址:62 序列到序列学习(seq2seq)【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:9.7. 序列到序列学习(seq2seq) — 动手学深度学习 2.0.0 documentation 本节开源代码:...>…

pdf编辑软件有哪些?方便好用的pdf编辑软件分享

PDF文件因其跨平台、格式固定的特性,成为了工作、学习和生活中不可或缺的一部分。然而,随着需求的不断增加,仅仅阅读PDF文件已难以满足我们的需求,编辑、转换PDF文件成为了新的焦点,下面给大家分享几款方便好用的PDF编…

《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优

1. 题记 有关Linux关键内核参数的调整,我前面的调优文章其实就有涉及到,只是比较零散,本篇集中深入介绍Linux常用关键内核参数及其调优,Linux调优80%以上都涉及到内核的这些参数的调整。 2. 文件系统相关参数 fs.file-max 参数…

SpringBoot3 + MyBatisPlus 快速整合

一、前言 MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。 这个发展到目前阶段已经很成熟了,社区也比较活跃,可以放心使用。官网地址:https://baomidou.com 二、快速开始 引入依赖 这里我引入了核心…

stm32单片机个人学习笔记11(ADC模数转换器)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…