Openresty log_by_lua_block 非阻塞 http 请求
Openresty log_by_lua_block non blocking http-request
在我有 log_by_lua_block
的一个 nginx 位置中,我需要通过 http 将几个 ngx.var
变量发送到远程服务器。如果我使用 Lua-cURL 之类的东西,它会阻止 nginx worker 直到请求完成。从 log_by_lua_block
发送非阻塞 http 请求的正确方法是什么?
类似于:
location / {
proxy_pass http://host;
log_by_lua_block {
someAsyncCurlRequest(ngx.var)
}
}
考虑使用 ngx.locatin.capture。
它会让你
Issue a synchronous but still non-blocking Nginx Subrequest using uri.
似乎无法从 log_by_lua_block 上下文中执行此操作。您可以尝试修改代码以使用不同的块来执行操作。例如,将逻辑移动到 access_by_lua_block 以利用共同插座。
就我个人而言,我会考虑使用不同的方法来解决问题,也许使用第 3 方工具监视日志文件并异步发送数据。这是因为即使执行异步请求仍然可能对 nginx 产生负面影响。
我这样做了:
location /proxy/ {
rewrite /proxy/(.*) / break;
allow 127.0.0.1;
deny all;
proxy_pass ;
}
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)}},}
}
在我有 log_by_lua_block
的一个 nginx 位置中,我需要通过 http 将几个 ngx.var
变量发送到远程服务器。如果我使用 Lua-cURL 之类的东西,它会阻止 nginx worker 直到请求完成。从 log_by_lua_block
发送非阻塞 http 请求的正确方法是什么?
类似于:
location / {
proxy_pass http://host;
log_by_lua_block {
someAsyncCurlRequest(ngx.var)
}
}
考虑使用 ngx.locatin.capture。 它会让你
Issue a synchronous but still non-blocking Nginx Subrequest using uri.
似乎无法从 log_by_lua_block 上下文中执行此操作。您可以尝试修改代码以使用不同的块来执行操作。例如,将逻辑移动到 access_by_lua_block 以利用共同插座。
就我个人而言,我会考虑使用不同的方法来解决问题,也许使用第 3 方工具监视日志文件并异步发送数据。这是因为即使执行异步请求仍然可能对 nginx 产生负面影响。
我这样做了:
location /proxy/ {
rewrite /proxy/(.*) / break;
allow 127.0.0.1;
deny all;
proxy_pass ;
}
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)}},}
}