zoukankan      html  css  js  c++  java
  • nginx+lua+redis

    git clone --branch master https://github.com/openresty/lua-resty-redis.git 

    yum install openssl openssl-devel
    tar xf LuaJIT-2.0.5.tar.gz
    cd LuaJIT-2.0.5 && make && make install
    tar xf tengine-2.2.0.tar.gz && cd tengine-2.2.0
     
    ./configure --prefix=/usr/local/tengine --with-http_lua_module --with-luajit-lib=/usr/local/lib/ --with-luajit-inc=/usr/local/include/luajit-2.0/ --with-lua-inc=/usr/local/include/luajit-2.0/ --with-lua-lib=/usr/local/lib/ --with-ld-opt=-Wl,-rpath,/usr/local/lib

    ua我们是手工安装的, 所以才会有后面的参数设置 --with-http_lua_module --with-luajit-lib=/usr/local/lib/ --with-luajit-inc=/usr/local/include/luajit-2.0/ --with-lua-inc=/usr/local/include/luajit-2.0/ --with-lua-lib=/usr/local/lib/

    --with-ld-opt

    其中的 --with-ld-opt=-Wl,-rpath,/usr/local/lib:/opt/openresty/luajit/lib 参数的意思是: 
    这是链接器选项,目的是把 /usr/local/lib 和 /opt/openrersty/luajit/lib 这两个路径添加进 
    nginx 可执行文件的 RPATH 头中,这样在启动的时候,系统就可以找到正确的动态链接库文件。

    https://groups.google.com/forum/#!msg/openresty/mVi0p-Qx7Qg/zNyrOZi-slgJ

    cd /opt

    cp /opt/source/lua-resty-redis/lib/resty/redis.lua .

    git clone --branch master https://github.com/openresty/lua-resty-redis.git

    测试部分

    vim nginx.conf
    ###如果redis 里面的 myk == 1 就返回一个第一个节点,其他返回第二个节点。
    worker_processes 1;
    events {
    worker_connections 1024;
    }
    http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    proxy_next_upstream error timeout;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $http_x_forwarded_for;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 100m;
    client_body_buffer_size 256k;
    proxy_connect_timeout 180;
    proxy_send_timeout 180;
    proxy_read_timeout 180;
    proxy_buffer_size 8k;
    proxy_buffers 8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    upstream client {
    server 127.0.0.1:8001;
    }
    upstream client_test {
    server 127.0.0.1:8002;
    }
    lua_package_path "/opt/lua-resty-redis/lib/resty/redis.lua";
    server {
    listen 8888;
    location / {
    default_type 'text/plain';
    content_by_lua '
    local redis = require "resty.redis"
    local red = redis:new()
    local headers=ngx.req.get_headers()
    local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "0.0.0.0"
    red:set_timeout(1000) -- 1 sec
    local ok, err = red:connect("192.168.5.101", 6379)
    if not ok then
    ngx.say("failed to connect: ", err)
    return
    end
    local res, flags, err = red:get("myk")
    if err then
    ngx.say("error",err)
    return
    end
    if res == "1" then
    ngx.exec("@client")
    return
    end
    ngx.exec("@client_test")
    ';
    }
    location /a{
    content_by_lua '
    ngx.exec("@client");
    ';
    }

    location @client{

    proxy_pass http://client;

    }

    location @client_test{

    proxy_pass http://client_test;

    }

    location /hello {
    proxy_pass http://client;
    }

    location = /50x.html {

    root html;

    }

    }

    }

     nginx+lua+redis 测试部分

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        proxy_next_upstream     error timeout;
        proxy_redirect          off;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $http_x_forwarded_for;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size    100m;
        client_body_buffer_size 256k;
        proxy_connect_timeout   180;
        proxy_send_timeout      180;
        proxy_read_timeout      180;
        proxy_buffer_size       8k;
        proxy_buffers           8 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
         upstream client {
            server   192.168.5.101;
        }
        upstream client_test {
            server   192.168.5.101;
        }
        lua_package_path "/usr/local/verynginx/lualib/redis/redis.lua";
        server {
           listen       80;
           location / {
            default_type 'text/plain';
                content_by_lua '
                    local redis = require "resty.redis"
                    local red = redis:new()
                    local headers=ngx.req.get_headers()
                    local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "0.0.0.0"
                    red:set_timeout(1000) -- 1 sec
                    ngx.say(ip)
                    local ok, err = red:connect("192.168.5.101", 6379)
                    if not ok then
                        ngx.say("failed to connect: ", err)
                        return
                    end
    
                    ok, err = red:set("dog", "an animal")
                    if not ok then
                        ngx.say("failed to set dog: ", err)
                        return
                    end
    
                    ngx.say("set result: ", ok)
    
                    local res, err = red:get("dog")
                    if not res then
                        ngx.say("failed to get dog: ", err)
                        return
                    end
    
                    if res == ngx.null then
                        ngx.say("dog not found.")
                        return
                    end
    
                    ngx.say("dog: ", res)
    
                    red:init_pipeline()
                    red:set("cat", "Marry")
                    red:set("horse", "Bob")
                    red:get("cat")
                    red:get("horse")
                    local results, err = red:commit_pipeline()
                    if not results then
                        ngx.say("failed to commit the pipelined requests: ", err)
                        return
                    end
    
                    for i, res in ipairs(results) do
                        if type(res) == "table" then
                            if not res[1] then
                                ngx.say("failed to run command ", i, ": ", res[2])
                            else
                                -- process the table value
                            end
                        else
                            -- process the scalar value
                        end
                    end
    
                    -- put it into the connection pool of size 100,
                    -- with 10 seconds max idle time
                    local ok, err = red:set_keepalive(10000, 100)
                    if not ok then
                        ngx.say("failed to set keepalive: ", err)
                        return
                    end
    
                    -- or just close the connection right away:
                    -- local ok, err = red:close()
                    -- if not ok then
                    --     ngx.say("failed to close: ", err)
                    --     return
                    -- end
                ';
            }
    
           location @client{
    
               proxy_pass http://client;
    
           }
    
           location @client_test{
    
               proxy_pass http://client_test;
    
           }
    
        location /hello {
    
            default_type 'text/plain';
    
            content_by_lua 'ngx.say("hello, lua")';
    
        }
    
        location = /50x.html {
    
            root   html;
    
        }
    
       }
    
    }
  • 相关阅读:
    用代码关闭冰刃(IceSword)
    .h和.cpp文件的区别
    获取其他进程的命令行(ReadProcessMemory其它进程的PPROCESS_PARAMETERS和PEB结构体)
    C#调用记事本并填写内容
    C#中比较两个对象的地址是否相同(也是引用计数的问题,和Java一样)
    JS代码的几个注意点规范
    javascript常用知识点集
    网站静态化处理—满足静态化的前后端分离(9)
    网站静态化处理—前后端分离—下(8)
    JS对文档进行操作
  • 原文地址:https://www.cnblogs.com/cp-miao/p/7505910.html
Copyright © 2011-2022 走看看