问题标签 [njs]

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 浏览

node.js - 通过nodejs、njs脚本语言扩展nginx

我在 nginx 文档上找到了可以使用的部分

带有一些 ECMAScript 6 及更高版本扩展的 ECMAScript 5.1(严格模式)

扩展 nginx。作为用例

在请求到达上游服务器之前,njs 中的复杂访问控制和安全检查

https://nginx.org/en/docs/njs/

不,我想知道我是否能够连接到数据库并执行与 node.js 中类似的操作。甚至在 nginx 进程中“运行”节点。但是我认为我的卡不好,因为目前只有两个模块,它们没有提供像网络套接字这样的功能,但是,有一个部分“使用带有 njs 的节点模块”:https ://nginx.org/en/docs/njs /node_modules.html

仅适用于外部库还是适用于“节点内部”,如 net、dgram 等?

0 投票
1 回答
347 浏览

nginx - nginx - njs - ngx_http_auth_request_module 如何向用户返回 302?

我正在使用 njs ngx_http_auth_request_module。

我有这样的js函数;

文档说“如果子请求返回 2xx 响应代码,则允许访问。如果它返回 401 或 403,则访问被拒绝并带有相应的错误代码。子请求返回的任何其他响应代码都被视为错误。” http://nginx.org/en/docs/http/ngx_http_auth_request_module.html

如果 subsequest 进入“else”块,我需要向用户返回 302。

有没有办法做到这一点?如果我设置 r.return(302),它会在浏览器中显示错误页面,如文档所述。

编辑:我的 nginx.conf

http://my-specific-url 返回

  • 200,如果 jwt cookie 有效
  • 302(带返回位置),如果 jwt cookie 无效
0 投票
0 回答
183 浏览

nginx - API 网关/代理配置中 API 访问令牌的 NGINX 服务调出

我有一个 nginx 网关,其配置类似于使用 nginx Javascript mod (njs) 的 Google Cloud API 的 API 网关反向代理

我的 default.conf 看起来像这样:

我的 oath2.js njs (Javascript) 看起来像这样:

在 http://localhost:19006/get-token 有一个伴随令牌服务,它生成 RS-SHA256 JWT(见下面的代码),并管理和返回 Google 访问令牌。这项服务没有问题。

该代码几乎可以在调试模式下根据 NGINX 日志文件运行。尽管 r.log(response.access_token) 已写入调试日志,但当代理调用 Google API 时,$gToken 的值似乎为空或为空。

日志似乎说调用 js_set $gToken getGoogleAccessToken;没有阻塞,因此 设置了proxy_pass https://GoogleApithatRequiresAuthentcationURL之前执行$gToken。的文档js_set表明应该在第一次访问时设置变量,以便在proxy_set_header Authorization $gToken调用时设置;调用 https://GoogleApithatRequiresAuthentcationURL 的调试日志中不存在授权标头

任何如何使这项工作的想法将不胜感激。没有任何真正好的 nginx 配方可用于代理需要令牌的 API。

这是管理 NGINX 代理的 Google 令牌的 google 令牌服务的工作代码,但这可以适用于其他令牌服务:

0 投票
1 回答
136 浏览

nginx - 如何使用 njs 解密 aes256 加密字符串?

sha 256 加密代码(来自文档)

我想使用 njs 来解码 aes256、base64 编码的字符串。但是,njs 官方文档只显示了 encrypt 方法。有没有办法解码或编码 aes256?我可以帮你吗?

0 投票
1 回答
41 浏览

javascript - nginx javascript模块持久化

是否可以在 nginx 的 javascript 模块中保留一些数据?

我需要从请求中保护一些数据以验证是否允许以下​​请求。

0 投票
0 回答
120 浏览

nginx - 使用 js_body_filter njs 指令时 Nginx 不返回响应正文

问题是当使用 js_body_filter 指令时,nginx 不返回响应。事实上,这是可以在文档和示例中找到的示例代码。我错过了什么?

下面是所有配置以及可以测试的 Dockerfile:

来自卷曲的回应:

默认.conf

envsubst.js

nginx.conf

索引.html

Dockerfile

0 投票
0 回答
89 浏览

node.js - 是否可以在 Nginx njs eniroment 中使用 libsquoosh(img 处理节点库)

我正在尝试:libsquooshNginx njs脚本模块一起用于内部OSM 切片服务器的一些花哨的即时图像兑现\处理。要在 njs 环境中使用 Node 库,我正在尝试遵循 Nginx how-to,但似乎无法绕过一个或其他全局(?)库而不是 browserify 来捆绑。

加载.jsglobal.ImagePool = require('@squoosh/lib').ImagePool;

错误: npx browserify load.js -o bundle.js -d Error: Can't walk dependency graph: ENOENT: no such file or directory, lstat './worker_threads'

分开来说,在浏览器\节点应用程序中使用库,以及使用 njs 动态获取图像并在动态路径返回 blob 并不难,但这会泄漏到一些我不理解的神秘(对我而言)领域。现在我的工作理论是找到节点存储其全局模块的位置并尝试将其提供给 browserify,这似乎没有效率。

另外,我怀疑是否有可能从njs 合规性开始:

ECMAScript 5.1(严格模式)和一些 ECMAScript 6

我还发现这个stackoverflow 线程提出了一种更简单的方法:使用位置重定向来包装其他服务,但这有点违背了拥有内置脚本语言的意义。

0 投票
1 回答
155 浏览

nginx - Nginx/njs API KEY 验证:internalRedirect vs subrequest, js_content + validate

我有一个有效的设计来验证 Nginx/njs 中的 API 密钥。让我向您展示我的最终解决方案,然后问几个与我在此过程中遇到的问题相关的问题(我很想了解为什么这些其他选项不起作用)。

这是我的 nginx.conf:

这是我的 validate-api-keys.js(请忽略“UNCOMMENT TO DEBUG”注释,这只是一个调试技巧:我监视返回的响应标头以查看代码的去向、值是什么等):

Q1:在我的 nginx.conf 中,当我的 js_content 和 proxy_pass 在同一个位置上下文中时,proxy_pass 也会触发,无论我的 javascript(在 js_content 中)是否尝试返回 401。它总是会执行 proxy_pass!这是为什么?我觉得这与“IF在位置块中是邪恶的”具有相同的想法/根本原因?

Q2:如您所见,在我的 JavaScript 中,我终于求助于 r.internalRedirect (效果很好!)但我首先撞到了一堆墙上:我注释掉的代码有什么问题?为什么“r.subrequest”不通过方法(在我的情况下是 POST)?我的后端总是抱怨它不支持“GET”,因为很明显,我的代码没有传递 Method=POST。有谁知道如何使注释掉的代码工作(将初始请求、方法等的所有参数传递给后端)?

感谢您帮助我找出我最初的路径出了什么问题!

0 投票
0 回答
20 浏览

nginx - 在 nginx njs 中缓存 401 响应

在我们的应用程序中,只要令牌(到达标头)无效 - 实际上可以保证不会有确切有效的令牌。因此,我试图将响应 401 的责任转移给 nginx(有或没有 njs) 试图避免使用被无效请求敲击的缓存来维护服务。

我正在考虑每次调用 js_content 并检查无效令牌的本地“内存缓存”,或者更好地使用 nginx 缓存的 API,但我似乎无法找到有关上述任何内容的文档。

身份验证请求似乎没有帮助,因为我无法使用将从我的服务返回的 401 填充缓存(在“缓存未命中”中)

欢迎任何其他可能的方式,但我希望能够将其卸载到 nginx

0 投票
0 回答
112 浏览

nginx - DOH 上的 NginX 502 错误网关

嗨,我想在我的树莓派上使用 nginx 作为 doh 和点服务器。我可以完美地运行 dot,但是当我尝试通过 DNS Over HTTPS 发送请求时,它会出现错误。我尝试了很多东西,但我不知道这里有什么问题?这是我发送的查询请求:

这是来自 doh 端点的响应

我的 nginx.conf 是这样的:

所以我在这里想念什么?我知道上游工作导致它通过点请求