Openresty log_by_lua_block非阻塞http请求
2019-8-12 8:8:36
收藏:0
阅读:112
评论:2
在nginx的一个位置上,我有一个'log_by_lua_block',在其中我需要通过http发送几个'ngx.var'变量到远程服务器。如果我使用类似Lua-cURL的东西,它会阻止nginx worker,直到请求完成。从'log_by_lua_block'发送非阻塞的http请求的正确方式是什么?
像这样:
location / {
proxy_pass http://host;
log_by_lua_block {
someAsyncCurlRequest(ngx.var)
}
}
点赞
用户6679321
location /proxy/ {
rewrite /proxy/(.*) /$1 break; // 将 /proxy/$1 重写为 /$1
allow 127.0.0.1; // 仅允许本地访问
deny all; // 拒绝其他访问
proxy_pass $1; // 代理到$urlPath,其中$urlPath=$1
}
log_by_lua_block {
local cjson = require "cjson.safe"
local postData = {}
postData["userIP"] = $remote_addr // 获取用户 IP 地址
res = ngx.location.capture_multi{{"/proxy/http://urlPath",{ method = ngx.HTTP_POST, body = cjson.encode(postData)}},} // 使用 POST 方法提交数据 {$1}
}
2019-10-10 12:46:17
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

看看是否可以使用 ngx.location.capture。
它可以让你:
从 log_by_lua_block 上下文中似乎不可能这么做。你可以尝试修改你的代码,使用另一个块来执行操作。例如,将逻辑移动到 access_by_lua_block 中以利用协同套接字。
个人认为,我会考虑使用不同的方法来解决这个问题,可能使用第三方工具监控日志文件,并异步发送数据。这是因为即使执行异步请求,仍可能对 nginx 产生负面影响。