nginx+lua+redis环境搭建(文末赋上脚本)

目录

需求背景

环境搭建后nginx和redis版本

系统环境

 搭建步骤

配置服务器DNS

 安装ntpdate同步一下系统时间

 安装网络工具、编译工具及依赖库

创建软件包下载目录、nginx和redis安装目录

下载配置安装lua解释器LuaJIT

下载nginx NDK(ngx_devel_kit)扩展模块

下载lua-nginx-module

下载安装lua-resty-http模块(lua的库,实现http功能的一些库)

下载安装lua-resty-redis模块(lua的库,实现操作redis功能的一些库)

下载配置安装nginx

将luajia相关库加载一下

下载安装redis

启动redis

启动nginx

环境测试

环境搭建的脚本


需求背景

想做个防重放攻击,在环境搭建过程中,发现nginx+lua的环境不是很好搭建,当然直接用打包好的openresty也是可以,只是对于定制化的一些库,还是需要什么就编译用什么还是方便些,本文不介绍防重放攻击的设计实现,只做nginx+lua+redis环境的搭建,实现一个通过web连接redis的demon,在此基础上只需自己开发lua即可

环境搭建后nginx和redis版本

系统环境

cat /etc/centos-release

 搭建步骤

配置服务器DNS

echo "nameserver 114.114.114.114" >> /etc/resolv.conf

 安装ntpdate同步一下系统时间

yum install ntpdate -y
ntpdate ntp.aliyun.com
timedatectl set-timezone Asia/Shanghai

 安装网络工具、编译工具及依赖库

yum install -y wget net-tools gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

创建软件包下载目录、nginx和redis安装目录

mkdir -p /root/dev_env /usr/cloudland/nginx /usr/cloudland/redis
export NGINX_INSTALL_PATH=/usr/cloudland/nginx
export REDIS_INSTALL_PATH=/usr/cloudland/redis

下载配置安装lua解释器LuaJIT

cd /root/dev_env
wget -c http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar xzvf LuaJIT-2.0.4.tar.gz 
cd LuaJIT-2.0.4
make install PREFIX=$NGINX_INSTALL_PATH/luajit 
export LUAJIT_LIB=$NGINX_INSTALL_PATH/luajit/lib
export LUAJIT_INC=$NGINX_INSTALL_PATH/luajit/include/luajit-2.0
cd -

注意上面的两个export命令,配置lua解释器的环境变量,解决的是"cannot find LuaJIT there"的问题

下载nginx NDK(ngx_devel_kit)扩展模块

wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -xzvf v0.3.0.tar.gz

下载lua-nginx-module

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
tar -xzvf v0.10.9rc7.tar.gz

下载安装lua-resty-http模块(lua的库,实现http功能的一些库)

wget https://github.com/ledgetech/lua-resty-http/archive/refs/tags/v0.16.1.tar.gz
tar -zxvf v0.16.1.tar.gz
cp -r lua-resty-http-0.16.1/lib/resty/ $NGINX_INSTALL_PATH/luajit/lib/lua/5.1/
cp -r lua-resty-http-0.16.1/lib/resty/ $NGINX_INSTALL_PATH/luajit/share/lua/5.1/

注意NGINX_INSTALL_PATH换成自己nginx的安装路径即可,上面的两个cp的命令,这个是解决resty-http找不到的问题

下载安装lua-resty-redis模块(lua的库,实现操作redis功能的一些库)

wget https://github.com/openresty/lua-resty-redis/archive/refs/tags/v0.29.tar.gz
tar -zxvf v0.29.tar.gz
\cp -r lua-resty-redis-0.29/lib/resty $NGINX_INSTALL_PATH/luajit/lib/lua/5.1/
\cp -r lua-resty-redis-0.29/lib/resty $NGINX_INSTALL_PATH/luajit/share/lua/5.1/

注意NGINX_INSTALL_PATH换成自己nginx的安装路径即可,上面的两个cp的命令,这个是解决resty- redis找不到的问题

下载配置安装nginx

wget https://nginx.org/download/nginx-1.20.1.tar.gz
tar -xzvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
./configure --prefix=$NGINX_INSTALL_PATH  --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-pcre --add-module=../lua-nginx-module-0.10.9rc7 --add-module=../ngx_devel_kit-0.3.0
make -j32
make install

将luajia相关库加载一下

echo "$NGINX_INSTALL_PATH/luajit/lib" >> /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig

注意NGINX_INSTALL_PATH换成自己nginx的安装目录

下载安装redis

wget http://download.redis.io/releases/redis-7.0.12.tar.gz
tar -zxvf redis-7.0.12.tar.gz
cd redis-7.0.12
make -j32
make install PREFIX=$REDIS_INSTALL_PATH
mkdir -p $REDIS_INSTALL_PATH/conf
cp redis.conf $REDIS_INSTALL_PATH/conf

注意REDIS_INSTALL_PATH是自己的redis安装目录

启动redis

/usr/cloudland/redis/bin/redis-server /usr/cloudland/redis/conf/redis.conf &

配置启动nginx

配置nginx.conf,指明lua库的路径

lua_package_path "/usr/cloudland/nginx/luajit/lib/lua/?.lua;;";server {listen       9080;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}location /lua/check {default_type 'text/plain';content_by_lua_file conf/lua/check.lua;}

 简单写一个lua的测试脚本check.lua,放到nginx的安装目录 conf/lua下,注意与nginx.conf里的content_by_lua_file 参数一致

check.lua的内容

local redis = require "resty.redis"
local cache = redis.new()local ok, err = cache.connect(cache, '127.0.0.1', '6379')if not ok thenngx.log(ngx.ERR, "failed to connect redis: ", err)ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
end

启动nginx

/usr/cloudland/nginx/sbin/nginx -c /usr/cloudland/nginx/conf/nginx.conf

环境测试

curl -I "http://localhost:9080/lua/check"

 curl返回200 OK,将redis-server kill掉之后返回500,说明通过nginx+lua连接redis成功,

环境搭建的脚本

有些库下载慢些,多执行几次就可以了

#!/bin/shNGINX_INSTALL_PATH=/usr/cloudland/nginx
REDIS_INSTALL_PATH=/usr/cloudland/redisSCRIPT_PATH=$(dirname $(readlink -f "$0"))DEP_DOWLOAD_PATH=$SCRIPT_PATH/dev_envecho "nameserver 114.114.114.114" >> /etc/resolv.confyum install wget ntpdate -yyum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -yntpdate ntp.aliyun.comtimedatectl set-timezone Asia/Shanghaiif [ ! -d $DEP_DOWLOAD_PATH ]; thenmkdir -p $DEP_DOWLOAD_PATH
ficd $DEP_DOWLOAD_PATH# LuaJIT
if [ ! -f LuaJIT-2.0.4.tar.gz ]; thenwget -c http://luajit.org/download/LuaJIT-2.0.4.tar.gz
fi
tar xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make install PREFIX=$NGINX_INSTALL_PATH/luajit
export LUAJIT_LIB=$NGINX_INSTALL_PATH/luajit/lib
export LUAJIT_INC=$NGINX_INSTALL_PATH/luajit/include/luajit-2.0
cd $DEP_DOWLOAD_PATH#ngx_devel_kit
if [ ! -f v0.3.0.tar.gz ]; thenwget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
fi
tar -xzvf v0.3.0.tar.gz#lua-nginx-module
if [ ! -f v0.10.9rc7.tar.gz ]; thenwget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
fi
tar -xzvf v0.10.9rc7.tar.gz#lua-resty-http
if [ ! -f v0.16.1.tar.gz ]; thenwget https://github.com/ledgetech/lua-resty-http/archive/refs/tags/v0.16.1.tar.gz
fi
tar -zxvf v0.16.1.tar.gz
\cp -r lua-resty-http-0.16.1/lib/resty/ $NGINX_INSTALL_PATH/luajit/lib/lua/5.1/
\cp -r lua-resty-http-0.16.1/lib/resty/ $NGINX_INSTALL_PATH/luajit/share/lua/5.1/if [ ! -f v0.29.tar.gz ]; thenwget https://github.com/openresty/lua-resty-redis/archive/refs/tags/v0.29.tar.gz
fitar -zxvf v0.29.tar.gz
\cp -r lua-resty-redis-0.29/lib/resty $NGINX_INSTALL_PATH/luajit/lib/lua/5.1/
\cp -r lua-resty-redis-0.29/lib/resty $NGINX_INSTALL_PATH/luajit/share/lua/5.1/# nginx
if [ ! -f nginx-1.20.1.tar.gz ]; thenwget https://nginx.org/download/nginx-1.20.1.tar.gz
fi
tar -xzvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
./configure --prefix=$NGINX_INSTALL_PATH  --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-pcre --add-module=../lua-nginx-module-0.10.9rc7 --add-module=../ngx_devel_kit-0.3.0
make -j32
make installecho "$NGINX_INSTALL_PATH/luajit/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfigcd $DEP_DOWLOAD_PATHif [ ! -f redis-7.0.12.tar.gz ]; thenwget http://download.redis.io/releases/redis-7.0.12.tar.gz
fitar -zxvf redis-7.0.12.tar.gz
cd redis-7.0.12
make -j32
make install PREFIX=/usr/cloudland/redis/if [ ! -d $REDIS_INSTALL_PATH/conf ]; thenmkdir $REDIS_INSTALL_PATH/conf
fi\cp redis.conf $REDIS_INSTALL_PATH/conf

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

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

相关文章

Vue3警告提示(Alert)

可自定义设置以下属性: 警告提示内容(message),类型:string | slot,默认:‘’警告提示的辅助性文字介绍(description),类型:string | slot&#…

libvirt 热迁移流程及参数介绍

01 热迁移基本原理 1.1 热迁移概念 热迁移也叫在线迁移,是指虚拟机在开机状态下,且不影响虚拟机内部业务正常运行的情况下,从一台宿主机迁移到另外一台宿主机上的过程。 1.2 虚拟机数据传输预拷贝和后拷贝 预拷贝(pre-copy): …

Git及Tortoisegit使用教程,设置中文

一、到git官网下载GIT 官网 二、下载安装Tortoisegit及中文语言包,Tortoisegit及语言包 语言包下载地址 三、在电脑某个盘的文件里右键 提示未设置git.exe 路径不能继续, 于是去下载git GIT下载 安装Git时, 一直点击 Next > 不要停, 直到结束 此时再跳到TortoiseGit…

Versal ACAP在线升级之Boot Image格式

1、简介 Xilinx FPGA、SOC器件和自适应计算加速平台(ACAPs)通常由多个硬件和软件二进制文件组成,用于启动这些设备后按照预期设计进行工作。这些二进制文件可以包括FPGA比特流、固件镜像、bootloader引导程序、操作系统和用户选择的应…

KaiwuDB CTO 魏可伟:多模架构 —“化繁为简”加速器

以下为浪潮 KaiwuDB CTO 魏可伟受邀于7月4日在京举行的可信数据库发展大会发表演讲的实录,欢迎大家点赞、收藏、关注! 打造多模引擎,AIoT数据库探索之路 01 何为“繁”? 工业 4.0 时代, 物联网产业驱动数据要素市场不…

蒙德里安的梦想

题目 求把 NM 的棋盘分割成若干个 12 的长方形,有多少种方案。 例如当 N2,M4 时,共有 5 种方案。当 N2,M3 时,共有 3 种方案。 如下图所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行&…

速腾robosense-sdk配置和使用方法

官方的安装和配置教程https://github.com/RoboSense-LiDAR/rslidar_sdk/ 1.手动下载sdk,下载tar.gz,然后解压缩:Releases RoboSense-LiDAR/rslidar_sdk GitHub 2.个人电脑连接速腾激光雷达后,确保能够ping通。当连接网线后,电…

Lua 批量修改文件夹下文件名

local s io.popen("dir C:\\Users\\lizhiyuan\\Desktop\\国家知识产权局ftp法律状态数据\\data /b/s") local filelist s:read("*a")local start_pos 0while 1 do_,end_pos,line string.find(filelist, "([^\n\r].xml)", start_pos)if not e…

Spring源码学习-SPI机制与Tomcat结合SpringMVC原理剖析

目录 SPIServiceLoader Servlet规范Tomcat与MVCServletContainerInitializer tomcat结合mvc启动tomcat如何切入进来Servlet与Spring定义的Servlettomcat启动 示意图 SPI 全称为:Service Provider Interface(服务提供接口) 接口工程:提供接口实现工程:实现接口,不同的实现工程…

低代码在边缘计算工业软件中的应用

近年来,边缘计算给工业现场带来了许多新的变化。由于计算、储存能力的大幅提升,边缘计算时代的新设备往往能够胜任多个复杂任务。另外,随着网络能力的提升,边缘设备与设备之间、边缘设备与工业互联网云平台之间的通讯延迟与带宽都…

在Linux下做性能分析1:基本模型

介绍 本Blog开始介绍一下在Linux分析性能瓶颈的基本方法。主要围绕一个基本的分析模型,介绍perf和ftrace的使用技巧,然后东一扒子,西一扒子,逮到什么说什么,也不一定会严谨。主要是把这个领域的一些思路和技巧串起来。…

APP开发的成本:全面预算指南

最近,我遇到了很多人在谈论一个重要的话题:“为什么有些人没有 APP开发,而有些人却有?” 我们讨论了预算、竞争、市场趋势以及开发人员如何平衡自己的职责。现在,我将就如何让你的 APP开发项目变得更好,让…