#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;
        }
    }
}

  

OpenResty(nginx_lua_module)做ES代理以及备份ES数据的更多相关文章

  1. es快照和备份

    注册前要注意配置文件加上 path.repo: ["/data/es_backup"] 然后重启es 不然会报错doesn't match any of the locations ...

  2. nginx做正向代理(Centos7,支持http和https)

    默认的情况下,使用nginx做正向代理可以解析http请求, 对于诸如baidu.com这样的https请求,nginx默认并不支持,不过我们可以借助第三方模块来实现. 1.先说默认情况下的代理配置 ...

  3. 用apache做为代理下载本地pdf文件

    有一些公司会用apache做为代理,下载服务器上的pdf文件.以下是apache做为代理的配置 一. 环境 centos6.5  192.168.69.3 二. yum安装apache 服务 [zxj ...

  4. 使用ssh正向连接、反向连接、做socks代理的方法

     ssh -L 219.143.16.157:58080:172.21.163.32:8080 用户名@localhost -p 10142  在 219.143.16.157机器执行   将ssh隧 ...

  5. nginx做反向代理并防盗链

    nginx做反向代理真的非常简单,只需设置location+proxy_pass即可. 防盗链配置有些复杂,需要注意的地方: 在防盗链的location中需要再设置一下proxy_pass(在这里走了 ...

  6. 用nginx做反向代理来访问防外链图片

    用nginx做反向代理来访问防外链图片 女儿的博客从新浪搬到wordpress后,发现原来博客上链接的新浪相册的图片都不能访问了,一年的博客内容,一个个去重新上传图片,修正链接也是个大工程.还是得先想 ...

  7. 【Nginx】使用Nginx做反向代理时,关于被代理服务器相应的超时设置

    > 参考的优秀文章 Module ngx_http_proxy_module > 设置等待被代理服务器的最大响应时间 使用Nginx做反向代理时,因被代理服务器因业务确实复杂,需时较久,往 ...

  8. Nginx做反向代理总是被系统kill

    公司使用Nginx做反向代理,以前都挺正常的,最近不知怎么回事总是无端被系统kill,而在nginx错误日志中也没有信息输出. 网上查了很多资料,也没什么靠谱的回答,唯一觉得有点关联的就是linux ...

  9. nginux做反向代理配置文件

    做反向代理的配置文件最好单独创建一个文件,然后在主配置文件中使用 include nginx-test.config;  这样的方式来导入. 配置代码如下: ## Basic reverse prox ...

随机推荐

  1. Java入门记(一):折腾HelloWorld

    HelloWorld,学习每门语言的第一步.有人戏称,这些年的编程生涯就是学习各种语言的HelloWorld,不知是自谦还是自嘲.目前所在的公司使用Java作为主要开发语言,我进行语言转换也大半年了, ...

  2. Dictionary和Hashtable的一些异同

    Dictionary和Hashtable 区别: Dictionary和Hashtable 区别 Dictionary Hashtable  支持范型 不支持 需要自己做线程同步 通过调用 Synch ...

  3. Hadoop 调研笔记

    由于从各光伏电站采集的数据量较大,必须解决海量数据的查询.分析的问题.目前主要考虑两种方式:1.  Hadoop大数据技术:2.  Oracle(数据仓库)+BI:    本文仅介绍hadoop的技术 ...

  4. MFC 给对话框注册热键

    在头文件中添加: //}}AFX_MSGafx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//(此行为加入的)BEGIN_MESSAGE_MA ...

  5. Action名称的搜索顺序

    假设当前的路径的URL是:http://StrutsDemo01/path1/path2/path3/test.action 步骤1.首先寻找命名空间(namespace)为 /path1/path2 ...

  6. 西门子Prodave5.5使用说明及VC示例

    西门子PLC的通信协议主要是PPI.MPI.Profibus.CP243/CP343/CP443 网络协议,prodave是早期完成的程序接口,除了网络协议外其它的主要协议都支持,SoftNet是西门 ...

  7. nginx https反向代理 tomcat

    前端nginx配置 server { listen ; server_name localhost; listen ssl; ssl_certificate /usr/local/nginx/sslk ...

  8. 关于iOS10 Xcode8真机测试项目出现的问题 "code signing is required for product type 'xxxxx' in SDK 'iOS 10.0"..

    昨天用真机测试项目出现这样的错误,在网上搜集了一些信息,所以将自己的经验分享出来帮助更多的人. 第一步: 检查你的1和2是否填写正确,如果你是运行别人的项目,BundleIdentifier要和你的X ...

  9. shell编程之运算符

    declare声明变量类型 declare    [+ / -] [选项]  变量名 - :给变量设定类型属性 + :取消变量的类型属性 -a :将变量声明为数组型 -i :将变量声明为整数型 -x ...

  10. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context ...