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


    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

  • 相关阅读:
    问题:Failed to execute goal org.apache.maven.plugins:mavencompilerplugin:3.5.1:compile (defaultcompile)
    STL容器的内存分配
    C++中的引用到底是什么
    解决eclipse无法解析shared_ptr
    Deleted pointer causes undefined behaviour
    诞生于饭桌上的jcSQL语言
    状压dp做题笔记
    TC做题笔记
    数据结构做题笔记
    POI做题笔记
  • 原文地址:https://www.cnblogs.com/LiQ0116/p/9174089.html
Copyright © 2020-2023  润新知