如何将结果API响应对proxy_pass attribut



我的客户端在NGINX服务器上带有加密的URI。Nginx必须通过向API发送请求来解密它。此API调用的结果是解密的URI被用作代理URI。

我已经使用njs插入nginx进行API调用,但是我在" redirect_uri"变量处理程序中捕获了此错误" async操作"

http{
    js_set $redirect_uri redirect_uri;
    server {
        location ~ ^/upload/(.*)$ {
            proxy_request_buffering off;
            resolver 127.0.0.1 ipv6=off;
            proxy_pass '$redirect_uri';
        }
    }
}
function redirect_uri(r) {
        r.uri.replace("/upload/", "");
        r.subrequest('/api/decrypt-uri/'+hash, { method: 'POST' }, function(res) {
        if (res.status != 200) {
            r.return(res.status);
            return;
        }
    var data=res.responseBody.toString();
        return data;
    });
}```

2019/07/30 15:55:07 [error] 10667#10667: *1 async operation inside "redirect_uri" variable handler, client: 127.0.0.1, server: api, request: "POST /upload/aHR0cHM6Ly9rbm94LmJpZ2RhdGEuaW5mcmEuZGdmaXAvZ2F0ZXdheS9kZWZhdWx0L3dlYmhkZnybXF5OHYtMDdWeFVaQ1JheFFTRTMxeTJ2Z0hhOHFmV002WkhsRzItQWtRLXVRd2ZvblZpX2lyMDlxZU9IZUtMWHdyejdNTnFJeEdMdFZqSk0= HTTP/1.1"

这看起来与这里问的问题相似:https://github.com/nginx/njs/issues/213,带有答案:

r.subrequest(((或在JS_SET变量处理程序中不支持settimeout((((例如settimeout(((的任何异步函数。 您需要使用auth_request指令。请参阅一个相关的示例。

最新更新