zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/LiQ0116/p/9174089.html
Copyright © 2011-2022 走看看