【问题标题】:NGINX : Making two asynchronously calls to a backend serverNGINX:对后端服务器进行两次异步调用
【发布时间】:2015-08-11 23:22:16
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: nginx openresty


    【解决方案1】:

    我看到了两种方法:

    1. 您可以使用 lua-nginx-modulelua-resty-redis 库在 Lua 中完成所有操作。在这里你可以找到一些信息Configure-nginx-to-get-url-from-redis-with-key-and-proxy-the-url-to-other-server

    2. 编写nginx C模块,使用redis2-nginx-module作为上游模块,发送子请求。看看我对Subrequests are not sent or the request hangs的回答,它显示了如何发送子请求。

    【讨论】:

    • 嘿,谢谢你的回复。我尝试了您提到的第二种方法,但它对我不起作用。是否可以将非 HTTP 请求作为子请求发送?我想向redis 发送一个查询作为子请求。
    • 还有一件事,作为参数发送到 ngx_http_subrequest() 的 URI 被附加到 nginx 的工作目录中
    • 是的,可以发送非 HTTP 子请求。指定一个 URl,它应该与您使用 redis2 模块作为上游的位置相匹配。
    • 不确定“附加到 nginx 的工作目录”。你可以使用来自 nginx 配置的子请求吗? openresty.org/download/…
    • 你有只发送一个子请求的代码吗,我可以参考一个简单的例子来检查我这边的任何错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多