问题标签 [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.

0 投票
1 回答
374 浏览

lua - 如何使用 openresty 的 Lua 插件实现 uwsgi_pass?

我需要对与特定位置匹配的传入请求执行一些半复杂的逻辑。简而言之,对于所有符合 的 url location ~* "^/([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})/?$",需要进行以下操作:

  1. 检查是否存在管理员 cookie。如果是这样的话:
    • 重写 URL ( /<uuid>-> /mod/<uuid>)
    • 履行uwsgi_pass
  2. 别的:
    • 在 postgres 中查找匹配 UUID 的条目
    • 在条目中搜索可用的重定向 URL
    • 将客户端重定向到选定的 URL

content_by_lua_block除了uwsgi_pass位之外,所有这些都相当简单。事实证明,谷歌在这项工作中最没有帮助......

我怎样才能执行 a uwsgi_passin acontent_by_lua_block

0 投票
1 回答
1285 浏览

nginx - Nginx - 对上游响应做出反应

我使用 nginx 作为反向代理,通过外部提供程序上传文件存储。当我处理文件上传时,我需要在向用户返回响应之前跟踪(在我的数据库中)上传是否成功。因此,我想使用ngx.location.capturelua-nginx-module 中提供的方法与我的后端讨论请求的结果。由于我需要等待上游服务器的响应,我只能在header_filter_by_lua. 不幸的是,我无法在 中发出任何向外的通信header_filter_by_luangx.location.capturengx.socket.*并且ngx.exec仅在响应尚未到达时可用。

我如何对 nginx 中的上游响应做出反应?

我想过的其他方法:

  • 让脚本监视访问日志,然后发出 curl 请求。(似乎应该有一个更简单的方法)
  • 最初通过 content_by_lua 中的 ngx.location.capture 发送文件(我认为这不会处理高达 5 GB 的文件大小)

帮助表示赞赏:)

0 投票
1 回答
926 浏览

nginx - 在 openresty 安装中找不到 CC 命令

我对Linux不是很熟悉,我刚刚开始学习nginx和nodejs。由于我使用 Windows,因此我尝试通过运行以下命令通过 MinGW 安装 openresty:

但我收到以下错误:

我需要安装一些额外的东西吗?GCC 存在并且它的版本是 3.4.4 (msys special)

0 投票
0 回答
143 浏览

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 服务器。

有人有什么想法吗?

0 投票
1 回答
1819 浏览

json - Openresty自定义json访问日志

我想将每个请求的 JSON 字符串写入访问日志中,以便以后使用它更容易。

我正在使用 Lapis/Openresty 公开的 print(),但是我想覆盖时间戳、日志级别和其他属于 nginx 日志格式的信息。

我怎样才能覆盖它?

0 投票
1 回答
189 浏览

erlang-otp - Erlang/OTP 和 OpenResty 之间的架构差异是什么?

在 Erlang/OTP 中,我读到了轻量级进程、参与者模型和监督者对于创建可靠服务的重要性。这与 OpenResty(master/worker、异步 IO、嵌入式 Lua)相比如何?

我对主要概念的总体架构概述感到好奇,以便更好地理解 OpenResty 如何与 Erlang/OTP 一起使用(或代替)。

0 投票
1 回答
901 浏览

openresty - Tarantool 如何嵌入到 OpenResty 中?

Openresty有一个用于指定 LuaJIT 路径的选项。NGXIN/Lua 模块对每个请求使用协程。但是,Tarantool 使用Fibers 而不是 Co-routines

这是否意味着您必须创建一个使用 Tarantool 的 Fibers的自定义lua-nginx-module ?

或者还有其他原因为什么不应该将 Tarantool 嵌入到 Openresty/NGINX 中以用于小型应用程序(即没有多机设置)?

0 投票
1 回答
1431 浏览

nginx - 如果 rewrite_by_lua_block 响应头包含模式,nginx 返回 200

rewrite_by_lua_block仅当响应包含带有模式的自定义标头(用于谷歌计算引擎平衡器健康检查)时,我才需要 nginx 在某个位置返回 200 代码。

我是lua的新手,所以非常感谢任何帮助。

0 投票
1 回答
1774 浏览

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)")

得到下一个错误:

0 投票
1 回答
633 浏览

nginx - lua redis字符串比较不起作用

密码 = 管理员 redisPassword = 管理员

我能够将两个密码都视为输出管理员,但它在 lua 代码中不匹配,并且控制总是转到其他部分。

当我这样比较时

if (tostring(password) == "admin" )

它工作正常,这意味着问题出在 redis 值上,但我在 redis 中设置了密码值 admin。