【问题标题】:Redirect url based on ID using lua使用lua根据ID重定向url
【发布时间】:2020-01-23 05:48:14
【问题描述】:

我对 Lua 和 nginx 非常陌生。我们正在尝试设置身份验证。 我正在尝试编写一个可以注入到我的 NGINX 中的脚本,它实际上会监听一个端点。

我的 api 会给我一个令牌。我会收到这个令牌并检查它是否存在于我的 YAML 文件或 JSON 文件中。

基于文件中提到的权限,我想将其重定向到具有必要权限的相应 url。

任何帮助将不胜感激。

【问题讨论】:

  • nginx 没有任何非阻塞磁盘 I/O,所以你应该重新考虑基于文件的解决方案,或者设置一个简单的“上游”服务来检查令牌 if 你需要每秒处理很多请求。
  • 上游服务是否允许我进行基于条件的路由?抱歉听起来像个菜鸟,但我在这里完全是新人..
  • 你当然可以把所有的逻辑放在nginx里。问题是,当 nginx 打开一个文件进行读取时,整个工作进程会停止,直到它完成从磁盘读取所述文件,这通常是您不想要的。
  • 当然你也可以在启动服务器(init_by_lua_block)时只加载json或yaml文件一次,然后将其留在内存中以供验证时使用(rewrite_by_lua_block)。
  • 如何使用 lua 读取和解析 json 文件?这是否需要任何额外的软件包安装?我们将使用 openResty

标签: api http nginx lua nginx-config


【解决方案1】:

首先,nginx 本身没有任何 Lua 集成;所以如果你只有一个 nginx 服务器,你根本无法在 Lua 中编写脚本。

您的意思可能是 openresty,又名。 lua-nginx-module,它允许您在 nginx 中运行 Lua 代码以编程方式处理请求。


假设您安装并运行了一个工作的 nginx + lua-nginx-module,您正在寻找的是 rewrite_by_lua 指令,它允许您根据客户端的请求将客户端重定向到不同的地址。 (实际上,您可能想改用rewrite_by_lua_blockrewrite_by_lua_file

在 Lua 块中,您可以进行 API 调用、执行某些逻辑等,然后在内部使用 ngx.exec 重定向到某个 URI,或者使用 ngx.redirect 向客户端发送实际重定向。

如果您想读取 JSON 或 YAML 文件,您应该在 init_by_lua 中执行此操作,以便文件仅加载一次,然后保留在内存中。 lua-cjson 模块是 nginx 自带的,所以你可以用它把你的 json 数据解析成 Lua 表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多