nginx - 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)
}
}
解决方案
研究使用ngx.locatin.capture。它会让你
使用 uri 发出一个同步但仍然非阻塞的 Nginx 子请求。
似乎不可能从 log_by_lua_block 上下文中做到这一点。您可以尝试修改代码以使用不同的块来执行操作。例如将逻辑移动到 access_by_lua_block 以利用共同套接字。
就我个人而言,我会考虑使用不同的方法来解决问题,也许是使用第三方工具监控日志文件并异步发送数据。这是因为即使执行异步请求仍然可能对 nginx 产生负面影响。