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

nginx - NGINX:对后端服务器进行两次异步调用

我想使用 NGINX 模块执行以下操作:Nginx 接收请求,检查它是否具有在缓存中解码请求的密钥(自定义)

  • 如果是,则解码请求,从中获取 ID,并检查键值存储(异步)中是否有针对此 ID 的值并在响应中返回
  • 如果否,则从键值存储(异步)中获取新键,然后将此键存储在缓存中并使用它来解码请求。获取 ID 并检查键值存储中是否有针对此 ID 的值(异步)并在响应中发送。

我能够弄清楚如何执行第 1 步,我通过从github引用 openresty 的 nginx 模块编写了一个上游模块。为了实现第 2 步功能,我尝试在第一个上游调用的 process_header() 函数中创建一个新的上游请求(即从商店获取密钥),但这不起作用。如何做到这一点?

提前致谢。

0 投票
1 回答
31 浏览

postgresql - ^ 和 $ 在 nginx.conf 位置有什么作用?

上面的代码片段取自https://github.com/FRiCKLE/ngx_postgres/issues/4

有人可以向我解释 ^ 的作用和 $ 的作用吗?我找不到解释它的文档。已经检查了https://github.com/FRiCKLE/ngx_postgreshttp://nginx.org/en/docs/http/ngx_http_core_module.html#location

0 投票
1 回答
46 浏览

postgresql - 有什么作用?在 nginx.conf 的位置做什么?

做 ?表示它可以作为变量 foo 被 ngx_postgres 访问?

我只需要确认这一点。 https://github.com/FRiCKLE/ngx_postgres#sample-configuration-5

这是纯粹的 ngx_postgres 函数,还是 nginx 也可以独立使用?

0 投票
1 回答
1228 浏览

nginx - 为什么我们必须在使用 OpenResty / nginx lua 进行子请求之前阅读请求正文?

我们将部分 nginx 访问控制委托给一个单独的服务,我们使用 access_by_lua_file 和 lua-resty-hawk 以及子请求来对请求进行身份验证。

文档说:

在启动子请求之前,您应该始终阅读请求正文(通过调用 ngx.req.read_body 或配置 lua_need_request_body)。

最初我们错过了这个细节,事情似乎正在发挥作用。我试图找到有关此要求的更多背景信息,但一无所获。

在读取正文之前授权请求会很好,因为如果客户端只是试图上传各种垃圾并填满我们的磁盘,我们可能能够提前终止连接并防止一种 DoS 攻击。

为什么会有这个限制?

0 投票
1 回答
3495 浏览

nginx - NGINX 和 Lua 脚本:在 content_by_lua 中的条件使用

我正在尝试创建一个有条件的 content_by_lua 脚本,其中的内容应该由 lua 仅在 turthy 条件下设置。

例子:

nginx.conf

nginx.lua

问题是 - nginx 下的 lua 脚本不支持同一路由中的 2 个内容指令,有没有我可以做的解决方法?

在条件为假时使用当前用法,我希望显示 index.html 但会收到一个空白页面

0 投票
0 回答
3936 浏览

nginx - OpenResty rewrite_by_lua vs. rewrite_by_lua_file - 语法错误

我正在使用 OpenResty Nginx,并在 Nginx conf 中有一段 Lua 脚本。(下面的示例,但为简洁起见被截断)。当它位于 nginx.conf 文件中时,它可以正常工作。

但是,如果我将此脚本提取到一个文件中,memcached.lua然后将其包含在 nginx 配置中rewrite_by_lua_file,我将无法重新启动 nginx 并收到有关语法错误的通知,例如:

unexpected "," in /etc/nginx/sites-enabled/memcached.lua

unknown directive "--" in /etc/nginx/sites-enabled/memcached.lua

如果我完全删除 ngx.log 行,语法错误就会消失。

为什么语法在 nginx conf 中有效,但在我将其提取到单独的文件时无效?我在某处读过有关字节码的文章,但不确定这是否相关?

编辑

这是 .lua 文件的完整输出。如果它通过以下方式直接嵌入到 nginx.conf 文件中,则此确切代码有效rewrite_by_lua

cat /etc/nginx/sites-enabled/memcached.lua

解决方案

TL:DR - 将 .lua 文件放在 Nginx 配置目录之外。

在被要求发布确切的错误消息后,我不得不重新创建问题。对于参考和谷歌搜索,错误消息如下所示:

2015/12/17 10:04:02 [emerg] 6903#0: unexpected "," in /etc/nginx/sites-enabled/memcached.lua:18

这次我从我的 nginx.conf 中复制了 Lua 代码,并将它放在一个名为的文件中memcached.lua,并保存在我的项目目录中。然后我在我的 nginx.conf 中添加了以下包含来代替 Lua 脚本:

rewrite_by_lua_file /path/to/my/project/memcached.lua;

它立即开始工作!

以前我通过将它从我的项目目录中符号链接到/etc/nginx/sites-enabled/memcached.lua(假设它实际上与包含它的 .conf 一起生活会更好),然后只是使用rewrite_by_lua_file memcached.lua;它,因为它是相对的 .conf 文件。

所以我最初想知道是不是因为该rewrite_by_lua_file函数不能遵循符号链接或其他东西,但后来我意识到这与 Lua 包含语句无关,但显然(现在!)因为符号链接在/etc/nginx/sites-enabled所以 Nginx 是自动尝试加载文件,就好像它是一个普通的 Nginx 配置文件一样。

/etc/nginx/sites-enabled/*这是因为 Nginx(在 Ubuntu/Linux Mint 上)被配置为使用其主配置的路径导入所有配置文件。

我认为我犯这个简单错误的原因是,在带有 Apache 的更高版本的 Ubuntu 上,会发生类似的过程,但是使用 Apache(我更习惯于)你有一个包含路径/etc/nginx/sites-enabled/*.conf- 即它特别需要一个 .conf 文件扩展名,这就是为什么我错误地认为 Nginx 不会尝试包含我的 .lua 文件。

0 投票
2 回答
855 浏览

unit-testing - docker单元测试设置

我想为我的产品设置一个单元测试环境。我在 Lua 的 nginx 上构建了一个使用 mysql 和 redis 的 Web 应用程序。我认为 docker 会对此有好处,尽管我是 docker 新手。我的应用程序在 centos 服务器(生产服务器)上运行。

我打算为 mysql、redis 和 webapp 设置不同的容器,然后在我的 mac(我的开发机器是 MAC)或 VM 中编写 UT 应用程序(使用 Busted 框架的 Lua 单元测试)来测试它。UT 应用程序将与 docker 容器 nginx 通信,而 nginx 将使用容器 mysql 和 redis。这个好吗 ?如果是的话,有人可以指导我如何做到这一点吗?也许一些好的链接?如果没有,还有什么更好的方法。我已经尝试过使用 vagrant,但这花费了太多时间,这不应该在我的 UT 案例中。

0 投票
1 回答
1444 浏览

cookies - 在 Openresty Lua 中删除多个动态命名的 cookie

下面的代码在 Openresty lua 中运行良好

虽然在尝试使 cookie 名称动态化时,它不起作用:

甚至尝试过使用 table.insert:

问题似乎与变量的分配ngx.header["Set-Cookie"]

0 投票
2 回答
2476 浏览

nginx - 为什么 nginx 声称在我的“重写”语句中没有终止分号?

当且仅当 cookie 存在时,我想将 URL 重定向到 Django 平台(通过 uwsgi)。如果做不到这一点,我需要将执行推迟到content_by_lua插件。

以下是我对这种逻辑的尝试:

Nginx 认为用以下日志消息侮辱我的智力是必要和适当的:

也许我和 nginx 想的一样密集,但我错过了什么?

额外的问题:我的一般方法安全和理智吗?有没有更好的方法来实现我的目标?

0 投票
1 回答
585 浏览

nginx - 为什么我的 nginx“重写”指令会导致重定向循环?

给定以下 http 块,nginx 按预期执行。也就是说,它将重写一个诸如http://localhost/3ba48599-8be8-4326-8bd0-1ac6591c2041/to之类的URLhttp://localhost/modif/3ba48599-8be8-4326-8bd0-1ac6591c2041/并将其传递给uwsgi服务器。

但是,当我以显示的方式添加另一个location块时,事情变得很明显,我得到了ERR_TOO_MANY_REDIRECTS

这里到底发生了什么?我怎样才能解决这个问题?