我对https://github.com/openresty/lua-nginx-module/issues/220
有类似的需求我的用例
proxy_pass
。$body_bytes_sent
传递给远程网址。content_by_lua
阻止,ngx.capture
转发到proxy_pass
区块,ngx.say()
返回来自ngx.capture
的内容。随后是$ body_bytes_sent到远程网址的请求。但我需要支持流媒体,这是不可能做到的。文件可能会变得很大,这对ngx.capture()
来说很糟糕。log_by_lua
块,但是cosockets apis被禁用了。 https://github.com/openresty/lua-nginx-module#log_by_lua 答案 0 :(得分:0)
安装Lua-Curl或其他不依赖于cosockets的库。 (https://github.com/Lua-cURL/Lua-cURLv3)
如果你正在使用luarocks(附带openresty),请安装
apt-get install libcurl3 libcurl3-gnutls libcurl4-openssl-dev --yes
luarocks install Lua-cURL
使用log_by_lua
(例如log_by_lua_block,log_by_lua_file),就像这样。
# some nginx conf
location /a_location_with_proxy_pass {
proxy_pass https://example.com:443;
log_by_lua_file /path/to/luafile.lua;
}
然后,您的log_by_lua_file应该对远程服务器执行curl请求。
local cURL = require 'curl'
curlHandle = cURL.easy{
url = 'https://remote_host.com/endpoint',
post = true,
httpheader = {
'Content-Type: application/json';
},
postfields = '{"bytes":' .. ngx.var.body_bytes_sent .. '}'
};
curlHandle:perform();