问题标签 [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 回答
1101 浏览

nginx - How can Openresty get the socket port in proxy server between prroxy server and upstream server?

I use OpenResty® to proxy my backend server. The process is client->proxy server->backend server

The question is the comment of the code:

Client sends a message to proxy server, then proxy server forwards the message to backend server.The proxy server will new a socket to connect the backend server, so how to get the proxy server socket port between proxy server and backend server in content_by_lua_block?

0 投票
1 回答
797 浏览

nginx - 通过 Nginx 重写 WebSocket 消息?

是否可以重写通过 Nginx 代理的 websocket 消息的内容?

例如,假设我发送了一条包含内容的消息JSON.stringify({ auth: 'someIdKey' })。在 Nginx 上,我会替换 to 的值someIdKeysomeJwt然后将其转发到代理的上游资源。当上游资源将消息发送回客户端时,我还想进行反向翻译。

我知道如何为 HTTP 请求执行此操作(并且正在执行此操作),重写自定义标头以进行即时翻译,但我不确定如何将模式传递给 websocket 通信。

我使用OpenResty作为我的 Nginx 发行版,并且在 Lua 脚本方面还算不错。

将不胜感激任何想法/帮助。

0 投票
1 回答
1184 浏览

nginx - openresty:将 int64 转换为字符串

我将 openresty/1.7.7.2 与 Lua 5.1.4 一起使用。我收到int64的请求,我将它的字符串格式保存在数据库中(无法更改数据库架构或请求格式)。我无法匹配他们两个。

如果可能的话,有没有办法将 int64 转换为字符串,反之亦然?

更新:i从 protobuf 对象中获取。proto 文件描述i为 int64。我正在使用pb4luaprotobuf 库。

0 投票
1 回答
838 浏览

nginx - 如何根据 HTTP 操作和 URL 前缀路由到 content_by_lua nginx 指令?

我想默认将发送到我的 nginx 服务器的所有请求路由到我的后端应用程序,但有选择地将带有 GET HTTP 动词的 API 请求发送到由content_by_luanginx 指令支持的基于 OpenResty Lua 的 REST API。

我成功地能够使用以下配置根据 URL 前缀将所有 API 请求路由到 Lua API(请注意,这不考虑 HTTP 动词):

但是,正如我上面所说,我想进一步限制 API 请求,以便使用除 GET 之外的 HTTP 动词的任何请求(如 POST、PUT、DELETE 等)仍被路由到后端,而单独的 GET 请求被路由到 Lua API 位置。

根据其他一些帖子、博客和文档(并且听说if指令不受欢迎),我尝试使用limit_except指令,但随后 nginx 服务器在启动时崩溃,因为该content_by_lua指令似乎不是为limit_except块设计的。这是我的尝试:

很快就崩溃了

在委托给指令时,基于 URL 前缀和HTTP 动词有选择地在 nginx 中路由的最佳方法是什么?content_by_lua

0 投票
1 回答
1702 浏览

module - OpenResty require 找不到模块

在 Apache 惨遭失败后,我决定走 OpenResty 路线。到目前为止,Lua 代码正在执行,但是我选择将生成分成多个模块,以使代码更具可读性。

我尝试了几种要求文件的方法;- 我已从 /scripts/ 目录中取出一个文件,并将其移至根目录,但找不到文件 - 我已尝试在 /scripts/ 目录中引用 /scripts/ 提前一段时间,但一切都无济于事. 根本找不到模块。

我需要某种特殊的技巧来找到这些文件吗?

以下是错误日志的摘录:

0 投票
2 回答
2121 浏览

openresty - 为什么我不能设置多个cookie

我正在尝试设置多个 cookie,但它不起作用:

在客户端上,我没有收到任何 cookie。

0 投票
1 回答
1288 浏览

nginx - 理解 Nginx+OpenResty 中内联 Lua 代码中字符串的引用

为了测试,我需要使用OpenResty在 Nginx 服务器中创建一些假数据。我需要创建一个复制一个 IP 地址的数组,例如:

在 Ruby 中,实现可能如下所示:

我是 Lua 的初学者,为了让它在 OpenResty 环境中工作,我付出了很多努力。这似乎终于奏效了:

我在字符串引用方面遇到了一些问题。首先,我尝试'"1.2.3.4"'了,它在内联 Lua 部分中不起作用。这是可以理解的,因为该'字符已经是该content_by_lua部分的分隔符。

接下来,我尝试"\"1.2.3.4\""了,我希望它可以工作,但它导致了这个(令人困惑的)错误:

通过反复试验,我发现如果使用双引号 ( "\\"1.2.3.4\\""),这个错误就会消失。这在 OpenResty 中有效,尽管如果我在Lua REPL中尝试相同的代码会被拒绝:

为了帮助我理解并成为一个更好的 Lua/OpenResty 程序员,我有一些关于引用的问题:

  1. 为什么需要双引号(在 OpenResty 中)?(为什么"\\"1.2.3.4\\""而不是"\"1.2.3.4\""?)
  2. 为什么 OpenResty 的行为与 Lua REPL 不同?
  3. 是否可以在content_by_lua部分中使用单引号?(将其简化为'"1.2.3.4"'

(另外,一个不相关的问题困扰着我。有没有更简单的方法来表达代码?当我将它与我的 Ruby 片段进行比较时,我很确定它也可以在 Lua 中更优雅地表达。)

0 投票
1 回答
6730 浏览

nginx - Openresty Hello world with docker

我正在尝试让我的应用程序 dockerize 因为我一直在关注官方的 openresty dockerfile。我系统中的操作系统是 Ubuntu 16.04 64 位。

我已经使用这个 cmd 提取了该图像。

现在我想使用这个图像并想要制作简单的 hello world 应用程序。为此,我创建了我的工作目录,创建了一个自定义 dockerfile 并用它构建了我的自定义映像。最后我运行那个图像。以下是我的 dockerfile 内容。

nginx.conf

应用程序.lua

构建镜像

docker build -t user/openresty .

启动容器

当我尝试启动容器时,它给了我一个类似 nginx: invalid option: "/bin/sh" 的错误

我不知道我的方向是对还是错。

更新:

我刚刚使用了这个 CLI,它开始显示我创建的 index.html。我再次尝试使用下面的 CLI 链接我的自定义 nginx.conf,但它不起作用。

docker run -it -p 8888:8888 -v $(pwd):/app openresty/openresty:1.11.2.3-xenial -p /app -c nginx.conf

使用以下命令它开始工作,但有人可以解释一下吗?

0 投票
1 回答
1339 浏览

nginx - nginx 未知指令“ssl_certificate_by_lua_block”错误

我刚刚安装了openresty 1.9.15.1 并想尝试ssl_certificate_by_lua_block指令。

但我得到一个错误说

[emerg] 13854#0:/etc/nginx/nginx.conf 中的未知指令“ssl_certificate_by_lua_block”

当我使用重新加载 nginx 时,错误消息将写入错误日志/etc/init.d/nginx reload

但奇怪的一点是控制台说ok重载操作。

nginx -t说我的 nginx.conf 语法没问题。

我的 nginx.conf 的一部分看起来像这样:

这是我的 nginx 的版本:

我安装的 openresty 有什么问题吗?

安装文件

强烈建议使用集成了 Nginx、ngx_lua、LuaJIT 2.1 以及其他强大的 Nginx 模块和 Lua 库的 OpenResty 版本。

这就是为什么我认为ssl_certificate_by_lua_block一旦安装了 openresty 就可以使用。

0 投票
1 回答
161 浏览

postgresql - 从 lapis 连接到 postgresql

我决定使用 lapis - https://github.com/leafo/lapis,但是当我尝试使用输出查询数据库(PostgreSQL)时应用程序丢失:

2017/07/01 16:04:26 [错误] 31284#0: *8 lua 入口线程中止:运行时错误:尝试跨 C 调用边界堆栈回溯:协程 0:[C]:在函数“要求”中/usr/local/share/lua/5.1/lapis/init.lua:15: 在函数'serve' content_by_lua(nginx.conf.compiled:22):2: 在函数中,客户端:127.0.0.1,服务器:,请求:“GET / HTTP/1.1”,主机:“localhost:8080”

导致错误的代码:

配置.lua:

数据库正在运行,表已创建,表 1 中有一条记录。

可能是什么问题呢?

决定https ://github.com/leafo/lapis/issues/556