问题标签 [openresty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lua - 如何使用 openresty 的 Lua 插件实现 uwsgi_pass?
我需要对与特定位置匹配的传入请求执行一些半复杂的逻辑。简而言之,对于所有符合 的 url location ~* "^/([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})/?$"
,需要进行以下操作:
- 检查是否存在管理员 cookie。如果是这样的话:
- 重写 URL (
/<uuid>
->/mod/<uuid>
) - 履行
uwsgi_pass
- 重写 URL (
- 别的:
- 在 postgres 中查找匹配 UUID 的条目
- 在条目中搜索可用的重定向 URL
- 将客户端重定向到选定的 URL
content_by_lua_block
除了uwsgi_pass
位之外,所有这些都相当简单。事实证明,谷歌在这项工作中最没有帮助......
我怎样才能执行 a uwsgi_pass
in acontent_by_lua_block
?
nginx - Nginx - 对上游响应做出反应
我使用 nginx 作为反向代理,通过外部提供程序上传文件存储。当我处理文件上传时,我需要在向用户返回响应之前跟踪(在我的数据库中)上传是否成功。因此,我想使用ngx.location.capture
lua-nginx-module 中提供的方法与我的后端讨论请求的结果。由于我需要等待上游服务器的响应,我只能在header_filter_by_lua
. 不幸的是,我无法在 中发出任何向外的通信header_filter_by_lua
。ngx.location.capture
,ngx.socket.*
并且ngx.exec
仅在响应尚未到达时可用。
我如何对 nginx 中的上游响应做出反应?
我想过的其他方法:
- 让脚本监视访问日志,然后发出 curl 请求。(似乎应该有一个更简单的方法)
- 最初通过 content_by_lua 中的 ngx.location.capture 发送文件(我认为这不会处理高达 5 GB 的文件大小)
帮助表示赞赏:)
nginx - 在 openresty 安装中找不到 CC 命令
我对Linux不是很熟悉,我刚刚开始学习nginx和nodejs。由于我使用 Windows,因此我尝试通过运行以下命令通过 MinGW 安装 openresty:
但我收到以下错误:
我需要安装一些额外的东西吗?GCC 存在并且它的版本是 3.4.4 (msys special)
c++ - 将 Lua 代码库从自定义 HTTP 服务器传输到 Nginx 后出现高延迟
在过去的几年里,我们一直在运行一个用 C++、libevent 和嵌入式 Lua(LuaJit 使用与 openresty,一个 Nginx 包使用的 LuaJit 共享库完全相同的 LuaJit 共享库)编写的自定义、预分叉、HTTP 服务器。巧合的是,它的架构与 Nginx 几乎相同。
该服务器的大部分业务功能都在 Lua 脚本“处理程序”中,当我们看到 Nginx 支持 Lua 时,我们认为我们应该将代码库转移到 Nginx 并利用 Nginx 拥有的所有社区支持。我们把所有的代码都移过来了,我们的测试显示一切正常,就功能被保留,然而......
我们遇到了一个问题。在旧的自定义 C++ 服务器上,HTTP 请求的延迟通常为 2 毫秒往返。基于 Nginx 的新服务器启动时间约为 60 毫秒。奇怪的是,我们对实际 Lua 代码执行的内部测量(使用 Lua os.clock() 对代码区域进行计时)显示,就 Lua 执行速度而言,两个服务器版本几乎相同。
使用各种分析器不会在 Nginx 代码上显示出任何非常大的缓慢区域。pcre 是最高的,大约花费了 6% 的时间。
还有一件事。我们的设置有一个代理 Nginx 服务器与我们的 Nginx Lua 服务器通信,两者都在同一台机器上,通过 127.0.0.1 进行通信,所以它是 LAN => Nginx 代理 => Nginx Lua 服务器。
有人有什么想法吗?
json - Openresty自定义json访问日志
我想将每个请求的 JSON 字符串写入访问日志中,以便以后使用它更容易。
我正在使用 Lapis/Openresty 公开的 print(),但是我想覆盖时间戳、日志级别和其他属于 nginx 日志格式的信息。
我怎样才能覆盖它?
erlang-otp - Erlang/OTP 和 OpenResty 之间的架构差异是什么?
在 Erlang/OTP 中,我读到了轻量级进程、参与者模型和监督者对于创建可靠服务的重要性。这与 OpenResty(master/worker、异步 IO、嵌入式 Lua)相比如何?
我对主要概念的总体架构概述感到好奇,以便更好地理解 OpenResty 如何与 Erlang/OTP 一起使用(或代替)。
openresty - Tarantool 如何嵌入到 OpenResty 中?
Openresty有一个用于指定 LuaJIT 路径的选项。NGXIN/Lua 模块对每个请求使用协程。但是,Tarantool 使用Fibers 而不是 Co-routines。
这是否意味着您必须创建一个使用 Tarantool 的 Fibers的自定义lua-nginx-module ?
或者还有其他原因为什么不应该将 Tarantool 嵌入到 Openresty/NGINX 中以用于小型应用程序(即没有多机设置)?
nginx - 如果 rewrite_by_lua_block 响应头包含模式,nginx 返回 200
rewrite_by_lua_block
仅当响应包含带有模式的自定义标头(用于谷歌计算引擎平衡器健康检查)时,我才需要 nginx 在某个位置返回 200 代码。
我是lua的新手,所以非常感谢任何帮助。
nginx - lua中奇怪的io.popen行为
我在 nginx 配置中有 lua 块,它检查 redis-server 连接以及是否有 4 个 java 进程启动,然后根据此检查返回 200 或 500 状态。
但是周期性output
变量具有nil
价值,而它不应该。只是不明白为什么会这样。
先谢谢各位同志了。
升级版:
使用tonumber
失败
bad argument #2 to 'tonumber' (number expected, got string)
更新位置配置:
UPD2:
记录到 nginx 错误(使用 tostring)接下来会打印:
UPD3:
使用命令grep -c '[j]ava.*63' <(/bin/ps aux)
避免使用管道:
local ps = io.popen("grep -c '[j]ava.*63' <(/bin/ps aux)")
得到下一个错误:
nginx - lua redis字符串比较不起作用
密码 = 管理员 redisPassword = 管理员
我能够将两个密码都视为输出管理员,但它在 lua 代码中不匹配,并且控制总是转到其他部分。
当我这样比较时
if (tostring(password) == "admin" )
它工作正常,这意味着问题出在 redis 值上,但我在 redis 中设置了密码值 admin。