问题标签 [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.
nginx - NGINX:对后端服务器进行两次异步调用
我想使用 NGINX 模块执行以下操作:Nginx 接收请求,检查它是否具有在缓存中解码请求的密钥(自定义)
- 如果是,则解码请求,从中获取 ID,并检查键值存储(异步)中是否有针对此 ID 的值并在响应中返回
- 如果否,则从键值存储(异步)中获取新键,然后将此键存储在缓存中并使用它来解码请求。获取 ID 并检查键值存储中是否有针对此 ID 的值(异步)并在响应中发送。
我能够弄清楚如何执行第 1 步,我通过从github引用 openresty 的 nginx 模块编写了一个上游模块。为了实现第 2 步功能,我尝试在第一个上游调用的 process_header() 函数中创建一个新的上游请求(即从商店获取密钥),但这不起作用。如何做到这一点?
提前致谢。
postgresql - ^ 和 $ 在 nginx.conf 位置有什么作用?
上面的代码片段取自https://github.com/FRiCKLE/ngx_postgres/issues/4。
有人可以向我解释 ^ 的作用和 $ 的作用吗?我找不到解释它的文档。已经检查了https://github.com/FRiCKLE/ngx_postgres和http://nginx.org/en/docs/http/ngx_http_core_module.html#location。
postgresql - 有什么作用?在 nginx.conf 的位置做什么?
做 ?表示它可以作为变量 foo 被 ngx_postgres 访问?
我只需要确认这一点。 https://github.com/FRiCKLE/ngx_postgres#sample-configuration-5
这是纯粹的 ngx_postgres 函数,还是 nginx 也可以独立使用?
nginx - 为什么我们必须在使用 OpenResty / nginx lua 进行子请求之前阅读请求正文?
我们将部分 nginx 访问控制委托给一个单独的服务,我们使用 access_by_lua_file 和 lua-resty-hawk 以及子请求来对请求进行身份验证。
文档说:
在启动子请求之前,您应该始终阅读请求正文(通过调用 ngx.req.read_body 或配置 lua_need_request_body)。
最初我们错过了这个细节,事情似乎正在发挥作用。我试图找到有关此要求的更多背景信息,但一无所获。
在读取正文之前授权请求会很好,因为如果客户端只是试图上传各种垃圾并填满我们的磁盘,我们可能能够提前终止连接并防止一种 DoS 攻击。
为什么会有这个限制?
nginx - NGINX 和 Lua 脚本:在 content_by_lua 中的条件使用
我正在尝试创建一个有条件的 content_by_lua 脚本,其中的内容应该由 lua 仅在 turthy 条件下设置。
例子:
nginx.conf
nginx.lua
问题是 - nginx 下的 lua 脚本不支持同一路由中的 2 个内容指令,有没有我可以做的解决方法?
在条件为假时使用当前用法,我希望显示 index.html 但会收到一个空白页面
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 文件。
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 案例中。
cookies - 在 Openresty Lua 中删除多个动态命名的 cookie
下面的代码在 Openresty lua 中运行良好
虽然在尝试使 cookie 名称动态化时,它不起作用:
甚至尝试过使用 table.insert:
问题似乎与变量的分配ngx.header["Set-Cookie"]
nginx - 为什么 nginx 声称在我的“重写”语句中没有终止分号?
当且仅当 cookie 存在时,我想将 URL 重定向到 Django 平台(通过 uwsgi)。如果做不到这一点,我需要将执行推迟到content_by_lua
插件。
以下是我对这种逻辑的尝试:
Nginx 认为用以下日志消息侮辱我的智力是必要和适当的:
也许我和 nginx 想的一样密集,但我错过了什么?
额外的问题:我的一般方法安全和理智吗?有没有更好的方法来实现我的目标?
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
。
这里到底发生了什么?我怎样才能解决这个问题?