首页 > 解决方案 > Openresty log_by_lua_block 非阻塞 http-request

问题描述

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

就像是:

location / {
   proxy_pass http://host;

   log_by_lua_block {  
          someAsyncCurlRequest(ngx.var)
   }    
}

标签: nginxcurlluaopenresty

解决方案


研究使用ngx.locatin.capture。它会让你

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

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

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


推荐阅读