【问题标题】:Openresty log_by_lua_block non blocking http-requestOpenresty log_by_lua_block 非阻塞 http-request
【发布时间】:2019-12-18 19:31:24
【问题描述】:

在一个 nginx 位置我有 log_by_lua_block,我需要通过 http 向远程服务器发送几个 ngx.var 变量。如果我使用 Lua-cURL 之类的东西,它会阻止 nginx 工作人员,直到请求完成。从log_by_lua_block 发送非阻塞 http 请求的正确方法是什么?

类似:

location / {
   proxy_pass http://host;

   log_by_lua_block {  
          someAsyncCurlRequest(ngx.var)
   }    
}

【问题讨论】:

    标签: nginx curl lua openresty


    【解决方案1】:

    考虑使用ngx.locatin.capture。 它会让你

    使用 uri 发出一个同步但仍然非阻塞的 Nginx 子请求。

    似乎不可能从 log_by_lua_block 上下文中做到这一点。您可以尝试修改代码以使用不同的块来执行操作。例如将逻辑移动到 access_by_lua_block 以利用 co-sockets。

    就我个人而言,我会考虑使用不同的方法来解决问题,也许是使用第三方工具来监控日志文件并异步发送数据。这是因为即使执行异步请求仍然可能对 nginx 产生负面影响。

    【讨论】:

      【解决方案2】:

      我这样做了:

      location /proxy/ { 
          rewrite /proxy/(.*) /$1  break; 
          allow 127.0.0.1; 
          deny all; 
          proxy_pass $1; 
      }
      
      log_by_lua_block {  
          local cjson = require "cjson.safe"
          local postData = {}
          postData["userIP"] = $remote_addr
          res = ngx.location.capture_multi{{"/proxy/http://urlPath",{ method = ngx.HTTP_POST, body = cjson.encode(postData)}},}
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-25
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        • 2016-07-06
        相关资源
        最近更新 更多