OpenResty(nginx_lua_module)做ES代理以及备份ES数据

#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
pid        logs/nginx.pid;
 
events {
    worker_connections  1024;
}
 
http {
 
    upstream master {
        server 10.1.1.100:9200;
        server 10.1.1.100:9200 backup;
        keepalive 15;
    }
 
    upstream slave {
        server 10.1.1.100:9200;
        keepalive 15;
    }
 
    server {
        server_name localhost 127.0.0.1 10.1.1.225;
        listen 8888;
 
        location / {
 
            #if ($request_method = "GET") {
                #proxy_pass http://master; # get直接走upstream master
            #}
 
            content_by_lua_block {
 
                local function getFile(file_name)
                    local f = assert(io.open(file_name, 'r'))
                    local string = f:read("*all")
                    f:close()
                    return string
                end
 
                ngx.req.read_body()
                ngx.log(ngx.ERR, '$$$' ..ngx.var.request_uri .. '$$$')
 
                local request_body = ngx.req.get_body_data()
                if nil == request_body then
                    local file_name = ngx.req.get_body_file()
                    if file_name then
                        request_body = getFile(file_name)
                    end
                end
 
                local master_resp, slave_resp
                local req_method_constant = ngx['HTTP_' .. ngx.req.get_method()]
                local arry = {method = req_method_constant, body = request_body}
 
                if req_method_constant == ngx.HTTP_POST or req_method_constant == ngx.HTTP_PUT or req_method_constant == ngx.HTTP_DELETE then
                    master_resp, slave_resp = ngx.location.capture_multi{
                        {'/slave' .. ngx.var.request_uri, arry},
                        {'/master' .. ngx.var.request_uri, arry}
                    }
                else
                    master_resp = ngx.location.capture_multi{
                        {'/master' .. ngx.var.request_uri, arry}
                    }
                end
 
                --[[
                    使用master的响应头
                --]]
                for k,v in pairs(master_resp.header) do
                    ngx.header[k] = v
                end
                ngx.say(master_resp.body)
            }
        }
 
        location ~* ^/master {
            internal;
            log_subrequest on;
            rewrite ^/master(.*)$ $1 break;
            proxy_pass http://master;
            access_log logs/master.log;
        }
 
        location ~* ^/slave {
            internal;
            log_subrequest on;
            rewrite ^/slave(.*)$ $1 break;
            proxy_pass http://slave;
            access_log logs/slave.log;
        }
    }
}

 

转载于:https://www.cnblogs.com/sanshuiqing/p/8808363.html

你可能感兴趣的:(OpenResty(nginx_lua_module)做ES代理以及备份ES数据)