Centos7环境下搭建Nginx+Lua+Redis进行数据存取

it2022-05-05  146

1.安装依赖环境

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

2.安装LuaJIT

cd /usr/local/ mkdir LuaJIT cd /usr/local/LuaJIT wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz tar –xvf LuaJIT-2.0.2.tar.gz cd LuaJIT-2.0.2 make install

3.安装nginx

cd /usr/local/ mkdir nginx 

下载ngx_devel_kit

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

下载lua-nginx-module

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

下载nginx

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

解压文件

tar -xvf ngx_devel_kit-0.3.0 .tar.gz tar -xvf lua-nginx-module-0.10.9rc7.tar.gz tar -xvf nginx-1.12.1.tar.gz

编译nginx

cd nginx-1.12.1 ./configure --prefix=/usr/local/nginx --add-module=../ngx_devel_kit-0.3.0 --add-module=../lua-nginx-module-0.10.9rc7

安装

make make install

或者合并两个命令(4表示并行运行任务的数量)

make -j 4 && make install

启动nginx

cd /usr/local/nginx/sbin ./nginx

测试是否启动成功:

访问  http:127.0.0.1:80

显示welcome to n ginx!表示启动成功

 

 

 

关闭nginx

./nginx –s stop

 

4.安装redis

cd /usr/local mkdir redis 

下载

wget http://download.redis.io/releases/ redis-2.8.17.tar.gz

解压

tar -xvf redis-2.8.17.tar.gz

进入解压后的文件夹

cd redis-2.8.17

安装

make

启动redis(&表示后台运行)

cd src ./redis-server &

启动成功后按ctrl+c退出启动界面

测试

./redis-cli set foo liq ---OK get foo ---liq

关闭redis

SHUTDOWN

 

 

5.配置redis主从

 

5.1主reids 配置文件

 复制一份redis的配置文件:

cd /usr/local/redis/redis-2.8.17 mkdir –p 6379/data 6380/data cp redis.conf /usr/local/redis/redis-2.8.17/6379/data/redis-6379.conf

编辑文件

cd /usr/local/redis/ redis-2.8.17/6379/data/ vim redis-6379.conf cd /usr/local/redis/ redis-2.8.17/6379/data/ vim redis-6379.conf

5.1.1

  daemonize no

  修改为:

  daemonize yes  (后台程序方式运行)

5.1.2

  pidfile /var/run/redis_6379.pid

  修改为:

  pidfile /usr/local/redis/redis-2.8.17/6379/redis_6379.pid

5.1.3

  //设置请求密码

  requirepass system

5.1.4

  //设置数据文件路径

  dir /usr/local/redis/redis-2.8.17/6379/data

 

 

5.2从reids 配置文件

 

cp /usr/local/redis/redis-2.8.17/6379/data/redis-6379.conf /usr/local/redis/redis-2.8.17/6380/data/redis-6380.conf

5.2.1

       port 改为6380

5.2.2

       pidfile 改为/usr/local/redis/redis-2.8.17/6380/redis_6380.pid

5.2.2

  删除 requirepass system

5.2.3

  //设置数据文件路径

  dir /usr/local/redis/redis-2.8.17/6380/data

5.2.4

  添加从属关系

  slaveof 127.0.0.1 6379

5.2.5

  添加主redis访问密码

       masterauth system

 

 

5.3启动redis

 

/usr/local/redis/redis-2.8.17/src/redis-server /usr/local/redis/redis-2.8.17/6379/redis-6379.conf /usr/local/redis/redis-2.8.17/src/redis-server /usr/local/redis/redis-2.8.17/6380/redis-6380.conf

 

5.4测试主从

在主redis中存数据

cd /usr/local/redis/redis-2.8.17/src ./redis-cli -h 127.0.0.1 -p 6379 auth system set foo test

ctrl+c退出

在从redis中取数据

./redis-cli -h 127.0.0.1 -p 6380 get foo

 

 

6.安装lua-resty-redis

 

从https://github.com/openresty/lua-resty-redis.git下载lua-resty-redis-master后解压

将lib包安装到lua库

cd lua-resty-redis-master make && make install

安装完成之后在/usr/local/lib/lua/resty里面会有redis.lua

 

7.修改nginx配置文件

cd /usr/local/nginx/conf vim nginx.conf

7.1

http内添加 lua_package_path "/usr/local/lib/lua/?.lua;;";

7.2

server  listen改为 9080;

7.3

server 内添加

location /lua/set {

             default_type 'text/plain';

           content_by_lua_file conf/lua/setKeyValue.lua;

    }

    location /lua/get {

             default_type 'text/plain';

           content_by_lua_file conf/lua/getKey.lua;

    }

 

完整配置文件nginx.cnof:

 

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; lua_package_path "/usr/local/lib/lua/?.lua;;"; sendfile on; keepalive_timeout 65; server { listen 9080; server_name localhost; location / { root html; index index.html index.htm; } location /lua/set { default_type 'text/plain'; content_by_lua_file conf/lua/setKeyValue.lua; } location /lua/get { default_type 'text/plain'; content_by_lua_file conf/lua/getKey.lua; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

 

8.编写content_by_lua_file对应的lua脚本

  8.1

#对应nginx中的配置:  content_by_lua_file conf/lua/setKeyValue.lua;

cd /usr/local/nginx/conf mkdir lua cd lua vim setKeyValue.lua

setKeyValue.lua代码:

--receive request params local request_method = ngx.var.request_method local args = nil local key = nil local value = nil --获取参数的值 if "GET" == request_method then args = ngx.req.get_uri_args() elseif "POST" == request_method then ngx.req.read_body() args = ngx.req.get_post_args() end key = args["key"] value = args["value"] --connect redis local redis = require "resty.redis" local cache = redis.new() local ok, err = cache.connect(cache, '127.0.0.1', '6379') cache:set_timeout(60000) if not ok then ngx.say("failed to connect:", err) return end -- 请注意这里 auth 的调用过程 -- check password local count count, err = cache:get_reused_times() if 0 == count then ok, err = cache:auth("system") if not ok then ngx.say("failed to auth: ", err) return end elseif err then ngx.say("failed to get reused times: ", err) return end local res, err = cache:set(key, value) if not res then ngx.say("failed to set "..key..": ", err) return end if res == ngx.null then ngx.say(key.." not found.") return end ngx.say("set redis value >>> "..key..": ", res) local ok, err = cache:close() if not ok then ngx.say("failed to close:", err) return end

 

8.2

#对应nginx中的配置: content_by_lua_file conf/lua/getKey.lua;

vim getKey.lua

getKey.lua代码:

 

--receive request params local request_method = ngx.var.request_method local args = nil local key = nil local value = nil --获取参数的值 if "GET" == request_method then args = ngx.req.get_uri_args() elseif "POST" == request_method then ngx.req.read_body() args = ngx.req.get_post_args() end key = args["key"] value = args["value"] --connect redis local redis = require "resty.redis" local cache = redis.new() local ok, err = cache.connect(cache, '127.0.0.1', '6380') cache:set_timeout(60000) if not ok then ngx.say("failed to connect:", err) return end local res, err = cache:get(key) if not res then ngx.say("failed to get "..key..": ", err) return end if res == ngx.null then ngx.say(key.." not found.") return end ngx.say("get from redis >>> "..key..": ", res) local ok, err = cache:close() if not ok then ngx.say("failed to close:", err) return end

 

9.开启端口映射(如果不是安装在虚拟机上的不需要此步骤)

9.1开启虚拟机端口映射:

 

9.2开放9080端口的防火墙(--permanent永久生效,没有此参数重启后失效):

firewall-cmd --zone=public --add-port=9080/tcp --permanent

 

10.重新启动nginx

cd /usr/local/nginx/sbin ./nginx 

11.查看效果

 

 

存值 -- 访问网址并传参: 

http://localhost:9080/lua/set?key=foo&value=test1

 

 

取值 -- 访问网址并传参:

http://localhost:9080/lua/get?key=foo

 


最新回复(0)